覆盖 Backbone.Wreqr.radio 个处理程序

Override Backbone.Wreqr.radio handlers

在我工作的公司,我们决定提取大部分 Marionette.js 代码并将它们分成几个 Rails Gem。

目前,我已经成功地拆分了 Marionette 控制器和视图。 Marionette 控制器中的某些内容对于我们的大多数电子商务应用程序都是必需的,因此我将此 JavaScript 代码提取到几个 Gems 中。然后,我们将能够使用我们已经拆分为 Gems 的内容,并在必要时覆盖/扩展 Controllers/Views。

对于应用范围内的操作,我们使用 Backbone.Wreqr。在我们的一个 Gem 中找到的事件处理程序示例:

Backbone.Wreqr.radio.commands.setHandler('product', 'show', function (slug) {
    API.showSingleProduct(slug);
    App.navigate("/products/" + slug);
});

但是,对于我们的一些应用程序,我们需要覆盖此处理程序以使其与我们项目中的一些自定义内容一起使用。

假设我想将上面的处理程序修改成这样:

Backbone.Wreqr.radio.commands.setHandler('product', 'show', function (slug, color) {
    API.showSingleProduct(slug, color);
    App.navigate("/products/" + slug);
});

当我在我们的基础项目中添加这样一个事件处理程序时,该事件将被调用两次。我实际上只需要触发最后一个(自定义的)事件处理程序。

有什么方法可以覆盖现有的 Backbone.Wreqr 事件吗?还是每次我想自定义以前的处理程序的行为时都应该删除以前的处理程序?

不需要删除以前的处理程序,设置一个新的处理程序会有效地覆盖分配给同一命名空间的任何处理程序。

您的代码应该可以注册单个处理程序,问题一定出在其他地方。