[英]How to call model's method from collection in backbone.js?
這些天我一直在努力學習backbone.js。 我是一個模特和一個集合。 該模型在其中定義了一些默認屬性,我想在集合中獲取。 這是我的代碼:
var model = Backbone.Model.extend({
defaults : {
done : true
}
});
var collection = Backbone.Collection.extend({
model : model,
pickMe : function () {
log(this.model.get('done')); //return undefined
}
});
var col = new collection();
col.pickMe();
如何從集合中調用模型中定義的方法? 我在這里做錯了嗎?
Backbone的基本設置如下:
您的模型是集合的一部分。 所以在你的設置中你有一個模型構造函數model
和集合構造函數collection
,但你的集合中沒有模型,如果你有任何模型它們將是一個數組,所以你的代碼應該是這樣的
var model = Backbone.Model.extend({
defaults : {
done : true
}
});
var collection = Backbone.Collection.extend({
model : model,
pickMe : function () {
for ( i = 0; i < this.models.length; i++ ) {
log(this.models[i].get('done')); // this prints 'true'
}
}
});
// Here we are actually creating a new model for the collection
var col = new collection([{ name : 'jack' }]);
col.pickMe();
你可以在這里檢查工作jsFiddle: http : //jsfiddle.net/S8tHk/1/
@erturne是正確的,你試圖在模型構造函數上調用方法,而不是模型實例。 這沒有意義。
如果您真的想要在集合上定義方法,那么@drinchev提供了一個示例,說明如何遍歷集合中的模型並調用它們的方法。 雖然,這個例子相當笨重 - 使用內置的迭代器方法會更優雅。
根據您要完成的任務,您可能只想使用內置的集合迭代器方法來調用每個模型上的方法,而不是在集合上定義方法。 例如:
var Model = Backbone.Model.extend({
defaults : {
done : true
}
});
var Collection = Backbone.Collection.extend({
model : Model
});
var col = new Collection([{}, {done : false}, {}]);
col.each(function (model) {
log(model.get('done'));
});
我認為你最好將模型方法附加到模型本身,而不是集合中。 所以你應該有這樣的事情:
var model = Backbone.Model.extend({
defaults : {
done : true
},
pickMe : function () {
log(this.get('done'));
}
});
var collection = Backbone.Collection.extend({
model : model,
});
var model = collection.get(id)
model.pickMe()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.