2012-12-17 20 views
7

Geçmişte jQuery'de pencereye bağlanarak çok basit bir pub/sub yaptık. jQuery Geri arama ve Pub/Sub

// subscribe 
$(window).on("someEvent", function() { ... }); 

// publish 
$(window).trigger("someEvent"); 

Ancak son zamanlarda jQuery pub/sub işleme önerilen yolu olarak görünmektedir yeni geri aramaları özelliği, öğrendik.

Pencereye yalnızca bağlanmanın tersine, geri dönüşü kullanmanın avantajları nelerdir? Yukarıdaki gibi basit bir sistem için Geri arama özelliği overkill kullanıyor?

Düzenleme: Burada sık yukarıdaki nasıl kullandığınız hakkında biraz daha bilgi ...

Bu bazen benim jQuery eklentileri birbirleriyle konuşmak için izin yapacak bir şey olduğunu. Örneğin, iletişim kurması gereken kendi sürülebilir ve bırakılabilir eklentilerim var.

Sürüklemeye başladığınızda, güncelleştirmeler ve durdurulduğunda, sürüklenebilir eklenti pencerede özel olayları tetikler. Atılabilir eklenti bu olayları izler ve buna göre tepki verir. pencereye Bağlama

// in draggable 

onStart: function() { 
    $(window).trigger("dragger.start", [data]); 
} 

// in droppable 

$(window).on("dragger.start", function(event, data) { 
... 
}); 
+0

Sanırım sorunuza birazcık genişlemelisiniz! Ne geri çağırmalar ve bunları nasıl kullanmayı düşünüyorsunuz? Özel etkinlikler için bu özel etkinlikleri ne kullanıyorsunuz? Bir pub/alt sistem çok farklı şeyler olabilir. – adeneo

+0

Adil yorum - Biraz daha bilgi ekledim – user1031947

cevap

1

kendi başına sorunlu değildir, ancak diğer olaylar penceresinden bağlı ve bağlı olmayan edilebilir çünkü sistem niyetinde olmadığını yan etkileri olabilir. Örneğin, "scroll" veya "click" gibi daha yaygın olayları çözme niyetiniz olsa bile $(window).off(), "someEvent" kodunu çözecektir.

Ben nispeten basit olduğu için Callbacks kullanarak overkill olduğunu söyleyemem - Ben Ne yaptığının daha basit söyleyebilirim: Eğer örnek kodu yerini alması gerekiyor bütün bunlar

var callbacks = $.Callbacks(); 
callbacks.add(function() { ... }); 
callbacks.fire(); 

. Hemen gördüğüm bir avantaj, tetikleme aşamasında tetiklemeniz gereken olayın ismini bilmenize gerek olmamasıdır; Daha şeffaf olarak ele alınır, ki bu genellikle hoştur.

Ayrıca, tek bir geri arama için birden çok işlev çağrısı ekleyebilir veya aynı anda birden fazla geri arama gerçekleştirebilirsiniz. Sadece window kullanıyorsan bunu yapmak daha zor.

1

jQuery'nin geri aramalarını ($ .Callbacks()) kullanmanın daha temiz kodlar oluşturduğunu ve bir pencereye bir işlevi bağlama yönteminizden çok daha organize olduğunu düşünüyorum. Daha fazla esnekliğe sahipsiniz çünkü geri çağırma işlemini tetiklerken kullanılacak etkinliklerin adlarını/adlarını bilmek zorunda değilsiniz.