簡體   English   中英

jQuery Callback和Pub / Sub

[英]jQuery Callback and Pub / Sub

在過去,我通過在窗口上綁定在jQuery中完成了非常簡單的pub / sub。

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

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

但是我最近了解了新的回調功能,這似乎是在jQuery中處理pub / sub的推薦方法。

使用回調有什么好處,而不僅僅是在窗口上綁定? 對於像上面這樣的簡單系統,使用回調功能是否過度殺傷?

編輯:這里有更多關於我如何使用上述內容的信息......

這有點我有時會允許我的jQuery插件相互通信。 例如,我有自己的需要通信的可拖動和可放置的插件。

當拖動開始,更新和停止時,可拖動插件會觸發窗口上的自定義事件。 droppable插件會監視這些事件並做出相應的反應。

// in draggable

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

// in droppable

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

綁定到窗口本身並不成問題,但由於其他事件可以綁定到窗口並從窗口取消綁定,因此系統可能會產生您不想要的副作用。 例如, $(window).off()將取消綁定"someEvent"即使只是你打算取消綁定更多常見事件,如"scroll""click"

我不會說使用Callbacks是過度的,因為它相對簡單 - 我會說比你做的更簡單:

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

這就是替換示例代碼所需的全部內容。 我立即看到的一個優點是您不需要知道在觸發階段需要觸發的事件的名稱; 它處理得更透明,這通常很好。

您還可以向單個回調添加多個函數調用,或同時進行多個回調。 如果您只是使用window這很難做到。

我認為使用jQuery的回調($ .Callbacks())可以使代碼更清晰,並且比將函數綁定到窗口的方法更有條理。 您具有更大的靈活性,因為您不必知道在觸發回調時要使用的事件的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM