在我工作的公司,我们决定提取大部分Marionette.js代码并将它们分成几个Rails Gems。
此时此刻,我已成功拆分木偶控制器和视图。 Marionette控制器中的一些内容对于我们的大多数电子商务应用程序都是必需的,因此我将这些JavaScript代码解压缩为几个Gems。然后,我们将能够使用我们已经拆分为Gems的东西,并在必要时覆盖/扩展控制器/视图。
对于应用范围内的操作,我们使用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事件?或者,每次我想自定义前一个处理程序的行为时,是否应该删除以前的处理程序?
答案 0 :(得分:1)
没有必要删除以前的处理程序,设置一个新处理程序会有效地覆盖分配给同一名称空间的任何处理程序。
您的代码应该在注册单个处理程序方面起作用,问题必须在其他地方。