我刚刚发现了router events in Giraffe的方法。可以按如下方式触发应用程序事件:
routes: { 'childView/:name': 'route:childView' // 'someHashLocation/:andItsParams': 'some:appEvent' },
由于通常路由事件由回调函数处理,我想知道从非Giraffe Backbone应用程序触发这些路由事件需要什么?您在这种情况下看到的任何问题都将路由器与应用程序模块分离开来了吗?
答案 0 :(得分:2)
由于通常路由事件由回调函数处理,因此 想知道从一个触发这些路由事件需要什么 非长颈鹿骨干应用程序?
任何引用路由器的内容都可以cause
路由事件,例如:
var app = new Giraffe.App({routes: {'post/:id': 'route:post'}});
// Trigger a route with an app reference
app.router.cause('route:post', 42); // => location changes to #post/42
// => 'route:post' triggered on `app`
Giraffe.Router#cause
与Backbone.Events#trigger
类似,只需添加导航到相应的路线(如果存在),router
触发app
上的事件,而不是自身。
使用app引用的任何内容都可以侦听路由事件:
// Handle the route from outside the Giraffe app
app.on('route:post', function(id) {...});
// Other `Backbone.Events` instances can listen to the Giraffe app
var myOtherApp = new Backbone.View;
myOtherApp.listenTo(app, 'route:post', function(id) {...});
该应用程序还可作为路由事件之外的便捷事件中心。所有Giraffe对象都引用this.app
(如果已创建)并支持快捷appEvents
绑定。
您看到的这类问题是否将路由器与应用程序模块分离?
(我是其中一位作者)我们公司和我个人经验并未发现这是一个问题,但可以想象这种基于事件的系统无法提供所需协调水平的情况。我们已经考虑过使用过滤器等功能改进路由处理,但还没有找到时间。如果您有建议,我们很乐意听到它们!