use*_*947 7 javascript jquery publish-subscribe jquery-callback
在过去,我通过在窗口上绑定在jQuery中完成了非常简单的pub/sub.
// subscribe
$( window ).on("someEvent", function() { ... });
// publish
$( window ).trigger("someEvent");
Run Code Online (Sandbox Code Playgroud)
但是我最近了解了新的回调功能,这似乎是在jQuery中处理pub/sub的推荐方法.
使用回调有什么好处,而不仅仅是在窗口上绑定?对于像上面这样的简单系统,使用回调功能是否过度杀伤?
编辑:这里有更多关于我如何使用上述内容的信息......
这有点我有时会允许我的jQuery插件相互通信.例如,我有自己的需要通信的可拖动和可放置的插件.
当拖动开始,更新和停止时,可拖动插件会触发窗口上的自定义事件.droppable插件会监视这些事件并做出相应的反应.
// in draggable
onStart: function() {
$( window ).trigger("dragger.start", [data]);
}
// in droppable
$( window ).on("dragger.start", function(event, data) {
...
});
Run Code Online (Sandbox Code Playgroud)
绑定到窗口本身并没有问题,但由于其他事件可以绑定到窗口或从窗口取消绑定,因此您的系统可能会产生您不希望的副作用。例如,即使您只是打算解除绑定更常见的事件(如或 )$(window).off(),也会解除绑定。"someEvent""scroll""click"
我不会说使用回调是多余的,因为它相对简单——我会说比你所做的还要简单:
var callbacks = $.Callbacks();
callbacks.add(function () { ... });
callbacks.fire();
Run Code Online (Sandbox Code Playgroud)
这就是替换示例代码所需的全部内容。我立即看到的一个优点是,您不需要知道在触发阶段需要触发的事件的名称;它的处理更加透明,这通常很好。
您还可以将多个函数调用添加到单个回调或同时具有多个回调。如果您只是使用window.