如何在执行路由方法之前运行“中间件”函数?

2024-05-01

假设我有一个主干路由器,例如:

routes:
  ""                          : "homepage"
  "catalog/:id"               : "catalogPage"
  "catalog/:id/products/:id2" : "productPage"

homepage   :           -> doStuff()
catalogPage: (id)      -> doOtherStuff()
productPage: (id, id2) -> doEvenMoreStuff()

和一个函数:

executeBefore = -> console.log("hello")

如果我希望每次调用路由时以及相应的路由方法之前调用并执行executeBefore,除了在每个路由方法的开头插入对executeBefore的调用之外,是否有一种简单的方法可以做到这一点?


您可以覆盖route路由器类中的函数用于拦截路由调用:

var Router = Backbone.Router.extend({
    routes: {
        "" : "homepage",
        "catalog/:id" : "catalogPage"
    },

    route: function(route, name, callback) {
        var router = this;
        if (!callback) callback = this[name];

        var f = function() {
            console.log('route before', route);
            callback.apply(router, arguments);
            console.log('route after', route);
        };
        return Backbone.Router.prototype.route.call(this, route, name, f);
    },

    homepage: function() {
        console.log("homepage");
    },
    catalogPage: function(id) {
        console.log("catalogPage "+id);
    }
});

var r = new Router();
Backbone.history.start();

还有一个演示http://jsfiddle.net/nikoshr/EdLzh/ http://jsfiddle.net/nikoshr/EdLzh/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在执行路由方法之前运行“中间件”函数? 的相关文章

随机推荐