命名空间Marionette的App事件聚合器事件jquery-like

时间:2014-08-19 20:31:50

标签: javascript jquery events backbone.js namespaces

在我的Backbone Marionette应用程序中,我使用'在'之前过滤东西。和'之后' (backbone.routefilter)。为了避免在路由器中执行此操作,我使用App的通风口在其他地方处理它。 我有一个向这些处理程序添加事件的方法,一切正常,除非我需要删除一些注册为在vent处理程序中运行的回调,例如:

// Some callback is registered to the router:before event.
App.registerRouterEventCallback.add({type: 'before', 'callback': function () { console.log("I'm Doe, John.") }});

// The URL changes and the callback is run.
App.vent.on('route:before', callback);

// In another site location, another callback is added to the events stack 
// and attached to the route:before callback: there are 2 functions registered 
// to this event now.
App.registerRouterEventCallback.add({type: 'before', 'callback': function () { console.log("I'm Doe, Josh.") }});

但如果第一个事件需要删除怎么办?调用App.vent.off(' route:before')无法完成,因为它会擦除附加到此事件的所有函数。

我想出的第一件事是命名事件,所以我可以删除它而不会搞砸其他事件。但是我希望它们能够动态添加,而不是在路由器中硬编码。实际上我想让路由器尽可能干净。

我想知道是否有开箱即用的东西如下:

// Listener for all route:before events
App.vent.on('route:before', fn);

// Listener for route:before:foo event
App.vent.on('route:before:foo', foo);

这里的想法是以更加jQuery-ish的方式处理它,您可以通过调用$('#foo').on('click.foo', fn)来分配$('#foo').off('click.foo')并删除此侦听器。

任何想法都会很棒。

0 个答案:

没有答案