Backbone.js - 使用beforeRoute过滤器扩展路由器

Mar*_*tta 3 javascript backbone.js

我正在尝试在Backbone.js中为我的路由实现前置过滤器.我在这里找到了以下代码-

var MyRouter = Backbone.Router.extend({
    route: function(route, name, callback) {
        return Backbone.Router.prototype.route.call(this, route, name, function() {
            this.trigger.apply(this, ['beforeroute:' + name].concat(_.toArray(arguments)));
            callback.apply(this, arguments);
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

但是,我不确定接下来我需要做什么.我需要使用我想要的"路由前"逻辑来定义一个函数,但我不明白它将如何被调用.

McG*_*gle 6

重写的route函数触发一个名为的事件beforeroute:routename,然后调用原始route函数.所以如果你有这样的路线:

var MyRouter = Backbone.Router.extend({
    routes: { 
        "": "home"
    },
    // ...
});
Run Code Online (Sandbox Code Playgroud)

然后您将使用以下命令订阅beforeroute事件:

var router = new MyRouter()

router.on("beforeroute:home", function() {

    // before route logic here...
    alert("Home route is about to get hit ...");
});
Run Code Online (Sandbox Code Playgroud)

小提琴演示.