Backbone.Model =>未捕获的TypeError:对象[Object object]没有方法'apply'

时间:2013-01-17 05:13:01

标签: javascript backbone.js requirejs marionette

我一直在和这个问题斗争几个小时。我似乎无法弄清楚为什么我的代码有效,现在却没有!

我正在使用Backbone和Marionette在requirejs上构建一个相当复杂的应用程序,而且我是所有这些库的新手,所以它有点令人困惑。

我收到了错误

Uncaught TypeError: Object [object Object] has no method 'apply'

我似乎无法弄清楚发生了什么或为什么我的应用程序现在无法正常工作,无论我似乎注释掉哪些代码。

有什么帮助指出我正确的方向?

1 个答案:

答案 0 :(得分:7)

我发现了问题。我一直在浏览我的代码并“优化”(所以我认为)一些裁员。

而不是:

define(["backbone"], function( Backbone ){
  var model = Backbone.Model.extend({
        myfunc : function(){ /*do stuff */}
  });

   return model;
});

我改变了一堆代码看起来像这样:

define(["backbone"], function( Backbone ){
     return Backbone.Model.extend({
          myfunc : function(){ /*do stuff*/ }
     });
});

没问题吧?居多。

我还使用了一个漂亮的技巧,我在另一篇关于通过返回实例化模型从require.js模块获取单例功能的帖子中读到了!很酷......主要是。

我有这个:

define(["backbone"], function( Backbone ){
    var singleton = Backbone.Model.extend({
         myfunc : function(){ /*do singleton stuff*/ }
    });

    // because require.js only runs this code once, this essentially creates a singleton!
    return new singleton();
});

它效果很好!

然后我变得自大......

define(["backbone"], function( Backbone ){
    return new Backbone.Model.extend({
         myfunc : function(){ /*do singleton stuff... no more!*/ }
    })();
});

我开始收到has no method 'apply'错误。

我花了2天的时间和很多挫折来追查问题,我终于得到了这篇文章的答案:

new Backbone.Model() vs Backbone.Model.extend()

它很好地解释了如何实例化Backbone.Model,但Backbone.Model.extend仅为您提供了一个构造函数,您可以使用它来实例化自定义Backbone.Model对象。

我希望这可以拯救我刚刚经历过的痛苦。