Javascript jQuery回调和发布/订阅

Javascript 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中处理发布/订阅的推荐方法 与仅绑定窗口相比,使用回调有什么好处?对于一个像上面这样的简单系统,使用回调特性是不是有点过头了 编辑:这里有一点更多的信息,我通常

在过去,我通过绑定窗口在jQuery中完成了非常简单的pub/sub

// 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())比将函数绑定到窗口的方法更简洁、更有条理,这就更难做到。您有更多的灵活性,因为您不必知道在触发回调时要使用的事件的名称。

我猜您需要对您的问题进行一些扩展!什么样的回调,以及您打算如何使用它们。你用这些自定义事件来做什么?一个酒吧/酒吧系统可以有很多不同的东西。公正的评论-我添加了一些更多的信息