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

fan*_*ncy 31 javascript coffeescript backbone.js

Cannot call 'start' of undefined打电话时得到......

    Backbone.history.start()
Run Code Online (Sandbox Code Playgroud)

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

可能是什么原因造成的?

谢谢

wes*_*bos 51

你在控制器上有路线吗?只有指定了至少一个路由后,Backbone才会创建历史记录.

更多:

TypeError:无法调用未定义**的方法'start'

嗯,由于某种原因Backbone.history是未定义的,所以没有启动方法.事实证明,一旦创建了一个至少有一个路由指定的控制器,Backbone.js就会创建一个名为Backbone.history(小写'h')的Backbone.History(大写'H')实例.这是有道理的,因为历史管理只有在有路由响应时才需要.

http://tinnedfruit.com/2011/04/26/testing-backbone-apps-with-jasmine-sinon-3.html

  • 我通过实例化我的路由器子类来解决这个问题.仅定义子类不会初始化它,因此历史记录仍未定义. (3认同)

小智 10

我遇到了同样的错误.

当您不创建路由器实例时会发生这种情况:

var routerInstance = new blogRouter();
Run Code Online (Sandbox Code Playgroud)


mga*_*dda 6

如果您正在使用CoffeeScript并且您的路由器是使用带有构造函数方法的CoffeeScript类关键字定义的,请仔细检查您是否在构造函数的定义中调用了super.这解决了Backbone.history的问题对我来说是空的.

class AppRouter extends Backbone.Router
  constructor: (options) ->
    super(options)
    # other initialization code
Run Code Online (Sandbox Code Playgroud)


Rok*_*lec 6

确保包含在HTML头jQuery.js 之前 underscore.jsbackbone.js之中.