调用时我得到Cannot call 'start' of undefined
Backbone.history.start()
运行一些检查时Backbone返回对象,但Backbone.history返回undefined。
这可能是什么原因?
由于
答案 0 :(得分:51)
你在控制器上有路线吗?只有指定了至少一个路由后,Backbone才会创建历史记录。
更多:
TypeError:无法调用undefined **
的方法'start' 嗯,由于某种原因Backbone.history是未定义的,所以没有 启动它的方法。事实证明,Backbone.js创建了一个实例 Backbone.History(大写'H')名为Backbone.history(低级 case'h')一旦创建了一个至少有一个控制器 指定的路线。这是有道理的,因为历史管理只是 如果有回应的路线则需要。
http://tinnedfruit.com/2011/04/26/testing-backbone-apps-with-jasmine-sinon-3.html
答案 1 :(得分:10)
我遇到了同样的错误。
当您不创建路由器实例时会发生这种情况:
var routerInstance = new blogRouter();
答案 2 :(得分:6)
如果您正在使用CoffeeScript并且您的路由器是使用带有构造函数方法的CoffeeScript类关键字定义的,请仔细检查您是否在构造函数的定义中调用了super。这解决了Backbone.history的问题对我来说是空的。
class AppRouter extends Backbone.Router
constructor: (options) ->
super(options)
# other initialization code
答案 3 :(得分:6)
确保在HTML头中包含{/ 1}} <{strong> jQuery.js
和underscore.js
之前。
答案 4 :(得分:2)
我出于不同的原因遇到完全相同的问题,花了几个小时后我意识到路由器中的一个方法“route”:function()导致问题,在我评论这个不必要的额外方法之后,history.start()按预期工作。
答案 5 :(得分:1)
如果您编写Backbone.History.start
而不是Backbone.history.start
,则会弹出类似的错误消息“..没有方法'start'”(正确的是{{1}中的小写h
}})。
答案 6 :(得分:1)
(function($) {
var Demo = Backbone.Router.extend({
routes:{
'*actions':'defaultRoute'
},
defaultRoute:function(action){
alert('xss');
}
});
var demo = new Demo;
Backbone.history.start();
//My site http://bbs.w3hacker.com
})(jQuery);
答案 7 :(得分:0)
同样使用旧版本的jquery可能导致此