1

我已经与这个问题斗争了几个小时。我似乎无法弄清楚为什么我的代码可以工作,而现在却不行!

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

我收到错误

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

而且我似乎无法弄清楚发生了什么或为什么我的应用程序现在无法运行,无论我似乎注释掉什么代码。

有什么帮助可以为我指明正确的方向吗?

4

1 回答 1

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 天的大部分时间和很多挫折来追查问题,我终于从这篇文章中得到了答案:

新 Backbone.Model() 与 Backbone.Model.extend()

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

我希望这可以减轻我刚刚经历的痛苦。

于 2013-01-17T05:13:00.960 回答