Backbone.History.扩展({loadUrl: ..})对于有效路由返回false
Backbone.History.extend( { loadUrl: ...} ) returning false for valid routes
我正在尝试扩展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。
你知道是什么导致了差异吗?
这个应该可以。
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;
}
});
如果你真的写
(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();
相关文章:
- 如何有效地将游戏数据存储在URL查询字符串中
- 如何使用Node.js最有效地解析网页
- jquery代码在Mozilla中有效,但在其他浏览器上无效
- 有效形式-始终只显示1个错误[角度]
- Javascript袖珍参考,第121页:这是怎么回事;猴子补丁”;方法应该有效
- 单击仅在第二次单击后有效
- 什么'是在asp.net MVC中将本地化的resources.resx文件转换为javascript文件的有效
- 为什么自我执行匿名有效
- D3.js生成有效的SVG,但不显示任何内容
- 如何在AngularJS中有效地检查日期是否有效
- 为什么不是'我的函数在解析云代码中工作吗?当我在Angular和Express中测试时,它是有效的
- 滚动在Chrome中有效,但在Firefox或IE中无效
- 有效地获取两个区间之间的随机整数
- Rails将JavaScript对象存储到Model的有效方式
- AngularJS 1.3-为什么表单在加载时有效,适用于长度最小的输入
- toExponential()仅适用于具有有效小数的大数字
- ExtJs v4.2.1.883 - Ext.data.Store创建没有模型.该名称不对应于有效的模型
- 在MongoDB中,将函数应用于集合中的所有对象的最有效方法是什么?
- MVC3使用Javascript回发类似于how $.Post是有效的,但是需要真正的回发
- YUI数据表数据源是否适用于所有有效的JSON对象