过去我通过绑定窗口在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) {
...
});
答案 0 :(得分:1)
绑定到窗口本身并不成问题,但由于其他事件可以绑定到窗口并从窗口取消绑定,因此系统可能会产生您不想要的副作用。例如,$(window).off()
将取消绑定"someEvent"
,即使您只打算取消绑定"scroll"
或"click"
等更常见的事件。
我不会说使用Callbacks是过度的,因为它相对简单 - 我会说比你做的更简单:
var callbacks = $.Callbacks();
callbacks.add(function () { ... });
callbacks.fire();
这就是替换示例代码所需的全部内容。我立即看到的一个优点是您不需要知道在触发阶段需要触发的事件的名称;它处理得更透明,这通常很好。
您还可以向单个回调添加多个函数调用,或同时进行多个回调。如果你只是使用window
,那就更难了。
答案 1 :(得分:1)
我认为使用jQuery的回调($ .Callbacks())可以使代码更清晰,并且比将函数绑定到窗口的方法更有条理。您有更多的灵活性,因为您不必知道在触发回调时要使用的事件的名称。