7

过去我通过在窗口上绑定在 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) {
...
});
4

2 回答 2

1

绑定到窗口本身并没有问题,但是因为其他事件可以绑定到窗口或从窗口取消绑定,您的系统可能会产生您不希望的副作用。例如,即使您只是打算取消绑定更常见的事件,例如or ,$(window).off()也会取消绑定。"someEvent""scroll""click"

我不会说使用回调是多余的,因为它相对简单——我会说比你所做的更简单:

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

这就是您替换示例代码所需的全部内容。我立即看到的一个优点是您不需要知道在触发阶段需要触发的事件的名称;它的处理更加透明,这通常很好。

您还可以将多个函数调用添加到单个回调或同时具有多个回调。如果您只是使用window.

于 2012-12-17T20:02:19.780 回答
1

我认为使用 jQuery 的回调 ($.Callbacks()) 可以使代码更简洁,并且比将函数绑定到窗口的方法更有条理。您有更大的灵活性,因为您不必知道触发回调时要使用的事件的名称。

于 2012-12-17T20:07:55.690 回答