2013-01-17 97 views
1

我一直在爲這個問題奮鬥幾個小時。我似乎無法弄清楚爲什麼我的代碼已經工作,現在不是!Backbone.Model =>未捕獲TypeError:Object [對象對象]沒有方法'apply'

我在requirejs上構建了一個相當複雜的應用程序,其中包含Backbone和Marionette,我對所有這些庫都很陌生,所以它有點令人困惑。

,我發現了錯誤

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

而且我似乎無法弄清楚發生了什麼,或者爲什麼我的應用程序現在無法正常工作,無論我似乎什麼樣的代碼註釋掉。

任何幫助指出我在正確的方向嗎?

回答

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()

它解釋很好,你如何實例化骨幹。 Model但Backbone.Model.extend僅僅爲您提供了一個構造函數,您可以使用它來實例化一個自定義的Backbone.Model對象。

我希望這節省了一些人我剛剛經歷過的痛苦。

相關問題