ethnagnawl и Алексей оба правы; _.wrap
- правильное решение, но если у вас есть куча маршрутов и вы пишете их обычным образом, это будет боль. Я понял, что вы можете сделать это:
var Pages = {}
Pages.loginPage = function(){ ... }
Pages.mainPage = function(){ ... }
Вместо того, чтобы определять свои обработчики маршрута непосредственно в Router.extend
, загрузите их в объект и затем сделайте следующее:
_.map(Pages,function(func,name){
Pages[name] = _.wrap(func,function(funky){
// Save original arguments
var args = Array.prototype.slice.call(arguments,1);
// Do stuff before the route
funky(args);
// Do stuff after the route
});
});
Это также позволяет довольно легко проверять имя функции, если вам нужно обрабатывать их подмножество по-другому или что-то в этом роде. Тогда, поскольку это просто объект, вы можете сделать это:
var myRouter = Backbone.Router.extend({
routes: ... /* as usual */
}).extend(Pages);
И все готово.
Одним приятным преимуществом этого является то, что он не мешает прототипам Backbone, поэтому даже если обновление версии что-то изменит, это вас не укусит.