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

ham*_*son 7 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();
    },

});
Run Code Online (Sandbox Code Playgroud)

我想要这样的东西:

var AppRouter = Backbone.Router.extend({

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

    initialize: function() {
    },

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

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

    change: function() { 
        customFunction();
    }

});
Run Code Online (Sandbox Code Playgroud)

有没有人有什么建议?

obm*_*arg 19

当路由被匹配Router,一个route:[name]事件与匹配路由的名称进行煅烧,允许类听某些路由匹配.所有骨干对象也支持all事件发生时触发的事件.

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

initialize: function() {
    this.bind( "all", this.change )
},
Run Code Online (Sandbox Code Playgroud)

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

更多细节请参见常见问题解答


Lau*_*ing 9

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

initialize: function() {
    this.listenTo(this, "all", this.change )
},
Run Code Online (Sandbox Code Playgroud)

route如果你问我,那就更好听.因为all触发两个事件,我认为这些:

"route:[name]"(params) - 当路由器匹配特定路由时由路由器触发.
"route"(route,params) - 当路由器匹配时由路由器触发.

  • 这是2015年更好的答案 (2认同)
  • 它是在2014年制造的:) (2认同)