2012-05-19 83 views
3

我有一個簡單的骨幹集合,從(遠程)資源拉對象的列表。調用Collection.fetch,雖然失敗,此錯誤:Backbone.Collection.fetch拋出「對象[...]沒有方法'_validate'」

Object [object Object] has no method '_validate' 

我猜這是引擎蓋下發生時,收集試圖爲每個JSON對象模型實例,同時增加。任何人都可以闡明爲什麼會發生這種情況?

這是我正在使用的代碼。很裸露的骨頭......

/* Models */ 

var SomeModel = Backbone.View.extend({}); 


/* Collections */ 

var SomeCollection = Backbone.Collection.extend({ 
    url: 'http://localhost:8000/api/some/resource/?format=json', 
    model: SomeModel, 

    parse: function(data) { 
     return data.objects 
    } 
}); 

var SomeView = Backbone.View.extend({ 
    collection: new SomeCollection(), 

    initialize: function() { 
     this.collection.fetch(); 
    }, 
}); 

而這裏的資源響應的一個例子:

{ 
    "meta": { 
    "count": 100 
    }, 
    "objects": { 
    {"title": "Title", "id": 1}, 
    {"title": "Title 2", "id": 2} 
    } 
} 
+2

當您想幫助調試運行時錯誤時發佈代碼示例是幫助我們幫助您的正確方法。 –

+0

請參閱上面的代碼和資源響應示例 – Carson

回答

15

你可能沒有設置您的收藏的model選擇一個有效的Backbone.Model子類。當集合獲取數據時,它將實例化模型並調用set,這將調用_validate,有效的Backbone.Model子類將具有,但您的實例不會。詳情請參閱the annotated source code for Backbone.Collection.fetch

感謝發佈代碼。這是問題。您的SomeModel延伸View而不是Model。我的猜測是複製/粘貼/忘記編輯。

var SomeModel = Backbone.View.extend({}); 
+0

一個好主意,但集合絕對是一個模型。 – Carson

+0

郵政編碼。 –

+0

我已經爲此問題添加了代碼。謝謝。 – Carson

相關問題