覆盖Backbone.Wreqr.radio处理程序

问题描述 投票:0回答:1

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

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

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

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事件?还是我想每次自定义先前处理程序的行为时都删除先前的处理程序?

javascript ruby-on-rails marionette backbone-events
1个回答
1
投票

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

您的代码应该在注册单个处理程序方面起作用,问题必须出在其他地方。

© www.soinside.com 2019 - 2024. All rights reserved.