1
我希望能夠在「before」函數中停止路由觸發器。上面的功能很好。它正確地調用「before」方法。當「before」方法被調用時,有沒有合適的方法來停止路由?如何在觸發該功能之前停止Backbone路由事件?
更新:已解決!
(function() {
_.extend(Backbone.Router.prototype, Backbone.Events, {
route: function (route, name, callback) {
if (!_.isRegExp(route)) route = this._routeToRegExp(route);
if (!callback) callback = this[name];
var router = this;
Backbone.history.route(route, _.bind(function (fragment) {
var args = this._extractParameters(route, fragment);
if (_.isFunction(router.before)) {
if (router.before.apply(this, args) === false) return;
}
callback && callback.apply(this, args);
this.trigger.apply(this, ['route:' + name].concat(args));
if (_.isFunction(router.after)) {
router.after.apply(router, args);
}
Backbone.history.trigger('route', this, name, args);
}, this));
return this;
}
});
}).call(this);
這裏是路由器代碼:
var AppRouter = Backbone.Router.extend({
routes: {
'': 'home',
'help(/)': 'help', // about or /about/
'page(/:id)(/)' : 'page',
'*path' : 'notFound'
},
before: function() {
return false; // the magic
},
after: function() {
},
});
它工作的方式。返回false可以立即停止進程。完善。基於knpsck解決方案的解決方案。
是的!有用!我不得不編輯一點。例如,if(_.isFunction(router.after){'line')中缺少一個'''',並且我必須對該函數的開始部分進行封裝,請查看更新後的問題。 – kastelli 2014-10-30 12:36:59
是的,錯過了支持。更新 – knpsck 2014-10-30 12:40:37
對不起,但你的擴展在同一時間前後調用。我把你的代碼和別人的代碼合併。我修改了代碼並且現在工作很好,請再次看到更新後的問題。 – kastelli 2014-10-30 13:37:14