Javascript jQuery回调和发布/订阅
在过去,我通过绑定窗口在jQuery中完成了非常简单的pub/subJavascript jQuery回调和发布/订阅,javascript,jquery,publish-subscribe,jquery-callback,Javascript,Jquery,Publish Subscribe,Jquery Callback,在过去,我通过绑定窗口在jQuery中完成了非常简单的pub/sub // subscribe $( window ).on("someEvent", function() { ... }); // publish $( window ).trigger("someEvent"); 然而,我最近了解了新的回调特性,这似乎是jQuery中处理发布/订阅的推荐方法 与仅绑定窗口相比,使用回调有什么好处?对于一个像上面这样的简单系统,使用回调特性是不是有点过头了 编辑:这里有一点更多的信息,我通常
// subscribe
$( window ).on("someEvent", function() { ... });
// publish
$( window ).trigger("someEvent");
然而,我最近了解了新的回调特性,这似乎是jQuery中处理发布/订阅的推荐方法
与仅绑定窗口相比,使用回调有什么好处?对于一个像上面这样的简单系统,使用回调特性是不是有点过头了
编辑:这里有一点更多的信息,我通常如何使用上述
这是我有时会做的事情,以允许我的jQuery插件彼此对话。例如,我有自己需要通信的可拖放插件
当拖动开始、更新和停止时,可拖动插件会触发窗口上的自定义事件。Dropable插件监视这些事件并做出相应的反应
// in draggable
onStart: function() {
$( window ).trigger("dragger.start", [data]);
}
// in droppable
$( window ).on("dragger.start", function(event, data) {
...
});
绑定到窗口本身并没有问题,但因为其他事件可以绑定到窗口或从窗口解除绑定,所以系统可能会产生您不希望的副作用。例如,
$(window).off()
将解除绑定“someEvent”
,即使您只是想解除绑定更常见的事件,如“scroll”
或“click”
我不会说使用回调是过分的,因为它相对简单——我会说比您所做的还要简单:
var callbacks = $.Callbacks();
callbacks.add(function () { ... });
callbacks.fire();
这就是替换示例代码所需的全部内容。我立即看到的一个优点是,您不需要知道在触发阶段需要触发的事件的名称;它的处理更加透明,这通常很好
您还可以向单个回调添加多个函数调用,或者同时进行多个回调。如果只使用
window
我认为使用jQuery的回调($.callbacks())比将函数绑定到窗口的方法更简洁、更有条理,这就更难做到。您有更多的灵活性,因为您不必知道在触发回调时要使用的事件的名称。我猜您需要对您的问题进行一些扩展!什么样的回调,以及您打算如何使用它们。你用这些自定义事件来做什么?一个酒吧/酒吧系统可以有很多不同的东西。公正的评论-我添加了一些更多的信息