Şuna bir bak:
(süresi dolan blog sayfasından http://web.archive.org/web adresindeki arşivlenen sürüme göre http://jamiethompson.co.uk/web/2008/06/17/publish-subscribe-with-jquery/ yeniden basılmıştır. /20130120010146/http://jamiethompson.co.uk/web/2008/06/17/publish-subscribe-with-jquery/ )
JQuery ile Yayınlama / Abone Olma
17 Haziran 2008
Google Gears'ın çevrimdışı işlevselliği ile entegre edilmiş bir jQuery kullanıcı arayüzü yazmak için jQuery kullanarak ağ bağlantısı durumunu belirlemek üzere bazı kodlarla oynuyorum.
Ağ Algılama Nesnesi
Temel dayanak çok basit. Bir URL'yi düzenli aralıklarla yoklayacak bir ağ algılama nesnesi örneği oluştururuz. Bu HTTP istekleri başarısız olursa, ağ bağlantısının kesildiğini veya sunucuya şu anda erişilemediğini varsayabiliriz.
$.networkDetection = function(url,interval){
var url = url;
var interval = interval;
online = false;
this.StartPolling = function(){
this.StopPolling();
this.timer = setInterval(poll, interval);
};
this.StopPolling = function(){
clearInterval(this.timer);
};
this.setPollInterval= function(i) {
interval = i;
};
this.getOnlineStatus = function(){
return online;
};
function poll() {
$.ajax({
type: "POST",
url: url,
dataType: "text",
error: function(){
online = false;
$(document).trigger('status.networkDetection',[false]);
},
success: function(){
online = true;
$(document).trigger('status.networkDetection',[true]);
}
});
};
};
Demoyu buradan izleyebilirsiniz. Tarayıcınızı çevrimdışı çalışacak şekilde ayarlayın ve neler olduğunu görün…. hayır, çok heyecan verici değil.
Tetikleyici ve Bağlama
Yine de heyecan verici olan (veya en azından beni heyecanlandıran şey), durumun uygulama aracılığıyla aktarılma yöntemidir. Ben jQuery tetik ve bağlama yöntemlerini kullanarak bir pub / alt sistemi uygulamak için büyük ölçüde tartışılmamış bir yöntem tökezledi.
Demo kodu olması gerekenden daha geniş. Ağ algılama nesnesi, 'durum' olaylarını belgede etkin bir şekilde dinleyen ve sonuç olarak olayları tüm abonelere 'bildir' yayınlar (daha sonra olanlar için). Bunun ardında yatan neden, gerçek bir dünya uygulamasında 'bildirme' olaylarının ne zaman ve nasıl yayınlanacağını kontrol etmek için muhtemelen daha fazla mantık olacağıdır.
$(document).bind("status.networkDetection", function(e, status){
// subscribers can be namespaced with multiple classes
subscribers = $('.subscriber.networkDetection');
// publish notify.networkDetection even to subscribers
subscribers.trigger("notify.networkDetection", [status])
/*
other logic based on network connectivity could go here
use google gears offline storage etc
maybe trigger some other events
*/
});
JQuery'nin DOM merkezli yaklaşım nedeniyle olaylar DOM öğelerine (tetiklenir) yayınlanır. Bu, genel olaylar için pencere veya belge nesnesi olabilir veya bir seçici kullanarak bir jQuery nesnesi oluşturabilirsiniz. Demoyu benimsediğim yaklaşım, aboneleri tanımlamak için neredeyse isimlendirilmiş bir yaklaşım yaratmak.
Abone olacak DOM öğeleri basitçe “abone” ve “ağAyarı” ile sınıflandırılır. Daha sonra, bir bildirim etkinliğini tetikleyerek etkinlikleri yalnızca bu öğelere (demoda yalnızca bir tane var) yayınlayabiliriz$(“.subscriber.networkDetection”)
#notifier
Bir parçası olan div .subscriber.networkDetection
abone grubuna daha sonra etkili bir dinleyici olarak hareket ederek, kendisine bağlı bir anonim işlevi vardır.
$('#notifier').bind("notify.networkDetection",function(e, online){
// the following simply demonstrates
notifier = $(this);
if(online){
if (!notifier.hasClass("online")){
$(this)
.addClass("online")
.removeClass("offline")
.text("ONLINE");
}
}else{
if (!notifier.hasClass("offline")){
$(this)
.addClass("offline")
.removeClass("online")
.text("OFFLINE");
}
};
});
Al işte ozaman, buyur. Her şey çok ayrıntılı ve benim örneğim hiç de heyecan verici değil. Ayrıca, bu yöntemlerle yapabileceğiniz ilginç bir şey sergilemez, ancak kaynakta kazmak isteyen herkes çekinmeyin. Tüm kod demo sayfasının başında satır içi