【问题标题】:Cannot call 'start' of undefined when starting backbone.js history.启动backbone.js 历史时无法调用未定义的“开始”。
【发布时间】:2011-11-12 16:32:09
【问题描述】:

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

    Backbone.history.start()

当运行一些检查时,Backbone 返回对象但 Backbone.history 返回未定义。

这可能是什么原因?

谢谢

【问题讨论】:

  • 当我输入 url 后跟一个 '#' 字符时,这个问题就解决了。

标签: javascript backbone.js coffeescript


【解决方案1】:

控制器上有路由吗? Backbone 仅在至少指定一条路由后才创建历史记录。

更多:

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

嗯,出于某种原因,Backbone.history 未定义,因此没有 start 方法就可以了。事实证明,Backbone.js 创建了一个实例 Backbone.History(大写“H”)称为 Backbone.history(小写 case ‘h’) 一旦创建了一个控制器,它至少有一个 上指定的路线。这是有道理的,因为历史管理只是 如果有要响应的路由,则需要。

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

【讨论】:

  • 在调用它之前,我将 window.router 设置为基本路由器。虽然是主干新手,所以我可能不完全理解这个问题。
  • 你做了什么让它工作?在调用Backbone.history.start() 之前,我还将window.router 设置为某个值,但仍然出现错误。
  • (而且那个“东西”是一个有多个路由的路由器。)
  • 另一个原因可能是两次包含 Backbone.js。看起来微不足道,但在开发插件/扩展时会出现。
  • 我通过实例化我的路由器子类解决了这个问题。仅仅定义子类并不会初始化它,因此历史仍然是未定义的。
【解决方案2】:

如果你写Backbone.History.start而不是Backbone.history.start,则会弹出类似的错误消息“.. has no method 'start'”(正确的是history中的小写h)。

【讨论】:

    【解决方案3】:

    我遇到了同样的错误。

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

    var routerInstance = new blogRouter();
    

    【讨论】:

    • 我实际上有一个实例 (dpaste.com/06NK3KD),但它没有找到默认函数的方法。
    【解决方案4】:
    (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);
    

    【讨论】:

    • 为提高您的帖子质量,请说明此代码将如何/为何解决问题。
    【解决方案5】:

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

    class AppRouter extends Backbone.Router
      constructor: (options) ->
        super(options)
        # other initialization code
    

    【讨论】:

      【解决方案6】:

      由于不同的原因,我遇到了完全相同的问题,在花了几个小时后,我意识到我的路由器“路由”中的一个方法:function() 导致了这个问题,在我评论了这个不必要的额外方法后,history.start()按预期工作。

      【讨论】:

        【解决方案7】:

        确保在 HTML 头部包含 jQuery.js before underscore.js 和 backbone.js。

        【讨论】:

          【解决方案8】:

          使用旧版本的 jquery 也可能导致此问题

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-02-22
            • 2021-07-18
            • 2018-02-04
            • 2016-10-03
            • 2019-07-25
            • 2013-01-27
            相关资源
            最近更新 更多