我试图扩展Backbone.History.loadUrl()以捕获404错误:
var History = Backbone.History.extend({
loadUrl: function() {
var match = Backbone.History.prototype.loadUrl.apply(this, arguments);
if (!match) {
console.log('route not found');
}
return match;
}
});
(Backbone.history = new History).start();
这是基于此处建议的解决方案:https://github.com/jashkenas/backbone/issues/308#issuecomment-9482299。
我遇到的问题是,当我在有效路由上调用(Backbone.history = new History).start()
时,它返回false。但是,当我在同一路线上调用Backbone.history.start()
时,它返回true。
当我向扩展的loadUrl方法添加调试器时,match
设置为false。
有关导致这种差异的原因的任何想法?
答案 0 :(得分:1)
这应该有效。
var oldLoadUrl = Backbone.History.prototype.loadUrl;
_.extend(Backbone.History.prototype, {
loadUrl : function () {
var matched = oldLoadUrl.apply(this, arguments);
if (!matched) {
console.log('route not found');
}
return matched;
}
});
答案 1 :(得分:0)
如果你真的写
(Backbone.history = new History).start();
您的新历史记录实例没有任何路由处理程序。因此,它不会匹配任何开始导致false
的路线。在start()
之后添加处理程序然后导航到该路由时,它当然会触发true
。
您应该在start()
历史记录之前实例化路由器或添加路由处理程序:
Backbone.history = new History();
// either
new CustomRouter();
// or
Backbone.history.route(/^some-route/, function(){ console.log("at test-login"); })
history.start();