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

rks*_*tar 1 javascript requirejs backbone.js marionette

几个小时以来我一直在与这个问题作斗争.我似乎无法弄清楚为什么我的代码工作,现在不是!

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

我收到了错误

Uncaught TypeError: Object [object Object] has no method 'apply'
Run Code Online (Sandbox Code Playgroud)

我似乎无法弄清楚发生了什么或为什么我的应用程序现在无法正常工作,无论我似乎评论出什么代码.

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

rks*_*tar 7

我发现了这个问题.我一直在查看我的代码并"优化"(所以我认为)一些冗余.

而不是这个:

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

   return model;
});
Run Code Online (Sandbox Code Playgroud)

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

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

不是问题吧?大多.

我还在另一篇关于通过返回实例化模型从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();
});
Run Code Online (Sandbox Code Playgroud)

它工作得很好!

然后我变得自大...

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

我开始得到我的has no method 'apply'错误.

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

新的Backbone.Model()vs Backbone.Model.extend()

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

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