在我的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')
并删除此侦听器。
任何想法都会很棒。