启动backbone.js历史记录时无法调用undefined的'start'。

时间:2011-09-08 05:08:21

标签: javascript backbone.js coffeescript

调用时我得到Cannot call 'start' of undefined

    Backbone.history.start()

运行一些检查时Backbone返回对象,但Backbone.history返回undefined。

这可能是什么原因?

由于

8 个答案:

答案 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.jsunderscore.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可能导致此