每次使用路由器时,Backbone.js都会触发功能

时间:2012-03-14 14:39:41

标签: javascript backbone.js

只是想知道每次使用Backbone.js路由器时是否有一种简单的方法来触发自定义功能,而无需在每个路由器功能中添加它。现在我的脚本看起来像这样:

var AppRouter = Backbone.Router.extend({

    routes: {
        '' : 'index',
        'test': 'test',
    },

    initialize: function() {
    },

    index: function() {
        customFunction();
        indexView.render();
    },

    test: function() {
        customFunction();
        testView.render();
    },

});

我想有这样的事情:

var AppRouter = Backbone.Router.extend({

    routes: {
        '' : 'index',
        'test': 'test',
    },

    initialize: function() {
    },

    index: function() {
        indexView.render();
    },

    test: function() {
        testView.render();
    },

    change: function() { 
        customFunction();
    }

});

有人有任何建议吗?

3 个答案:

答案 0 :(得分:19)

每当路由与Router匹配时,会使用匹配路由的名称触发route:[name]事件,以允许类侦听某些路由匹配。所有骨干对象也支持事件发生时触发的all事件。

所以你可以利用它来绑定all上的Router事件,只要路由器做了一些路由就会触发。

initialize: function() {
    this.bind( "all", this.change )
},

如果您对匹配的路线感兴趣,则将其作为第一个参数传递给绑定函数。

更多详情here in the FAQ

答案 1 :(得分:9)

更多(新的)Backbone编写绑定的方式是:

initialize: function() {
    this.listenTo(this, "all", this.change )
},
如果你问我,一个更好的倾听只会route;因为all会触发两个事件,我认为这些:

  

“route:[name]”(params) - 特定路由时由路由器触发   匹配。
  “route”(route,params) - 路由器在任何路由时触发   已匹配。

答案 2 :(得分:0)

我是骨干新手。在Laurens回答之后,我设法通过以下

来调用每个路线更改
app_router.on('route', function(e){
    console.log(e);
});