2

我刚刚在 Giraffe 中发现了路由器事件的方法。可以按如下方式触发应用程序事件:

  路线:{
    'childView/:name': '路线:childView'
    // 'someHashLocation/:andItsParams': 'some:appEvent'
  },

由于通常路由事件由回调函数处理,我想知道从非 Giraffe Backbone 应用程序触发这些路由事件需要什么?在这种将路由器与应用程序模块解耦的过程中,您看到了什么问题?

4

1 回答 1

2

由于通常路由事件由回调函数处理,我想知道从非 Giraffe Backbone 应用程序触发这些路由事件需要什么?

任何引用路由器的东西都可以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,而不是本身。

任何带有应用引用的东西都可以监听路由事件:

// 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绑定。

在这种将路由器与应用程序模块解耦的过程中,您看到了什么问题?

(我是作者之一)我们公司的我们和我个人的经验都没有发现这是一个问题,但是可以想象这种基于事件的系统无法提供所需的协调水平的情况。我们考虑过使用过滤器等功能改进路由处理,但还没有找到时间。如果您有建议,我们很乐意听取他们的意见!

于 2013-09-22T09:30:26.540 回答