2012-02-29 139 views
3

我的模型和集合看起來像這樣。無法在骨幹模型上調用自定義方法

var MyModel= Backbone.Model.Extend({ 

    foo: function(){ 
     alert("is not working..."); 
    } 
}); 

var MyCol = Backbone.Collection.extend({ 

    models:MyModel, 
    url: function(){ return '/json_from_server' }, //json data mapped to MyModel 
    poo:function(){ 
     alert("this works"); 
    } 
}); 

cols = new MyCol(); 

cols.fetch({ 

    success:function() { 
    cols.poo(); //this works fine 
     cols.models.forEach(function(item){ 
      alert(item.get("id")); //It works fine 
      alert(item.foo()); // this is not working... 
     });  
    } 
}); 

調用item.foo()時,瀏覽器會引發錯誤:未捕獲的類型錯誤:對象的翻譯:有沒有方法「富」 任何人可以幫助我弄清楚發生了什麼事情錯在這裏。

回答

5

在你MyCol對象,設置models: MyModel。我相信模型不應該是複數,所以它應該是model: MyModel

如果仍然無法正常工作,您可能需要像這樣在你爲MyModel一個_.bindAll:

var MyModel= Backbone.Model.Extend({ 
    initialize: function() { 
     _.bindAll(this, "foo"); 
    }, 
    foo: function(){ 
     alert("is not working..."); 
    } 
}); 

你的初始化沒有工作的原因前面已經因爲如上所述,你有「模型「作爲複數時它應該只是model

+0

謝謝你的工作。 – bhochhi 2012-02-29 23:34:36

4

在初始化中添加bindAll應該修復它。

var MyModel= Backbone.Model.Extend({ 
    initialize: function() { 
     _.bindAll(this); 
    }, 
    foo: function(){ 
     alert("is not working..."); 
    } 
}); 
+1

仍然沒有工作。有一件事我注意到,初始化方法沒有被調用(我認爲它應該),當獲取集合時。我發現cols中充滿了模型,但不會調用模型的「初始化」。我想知道爲什麼? – bhochhi 2012-02-29 08:23:59

+1

我在外面創建了模型對象:var mod = new MyModel(); mod.foo();這個工程甚至不使用_.bindAll(this)。我不知道爲什麼它通過集合獲取時不工作。 – bhochhi 2012-02-29 08:57:45

+1

我認爲使用抓取存在一些問題。相反,我用下面的方式工作。如果有人仍然有使用fetch的解決方案,我將不勝感激。 $ .getJSON( '// json_from_server',函數(數據){ 如果(數據){ VAR COLS =新MyCol(); _(數據).MAP(功能(I){ cols.add( new MyModel(i)); }); } }); – bhochhi 2012-02-29 09:08:14