バックボーン モデルの配列にアイテムを追加するには、これが本当に最善の方法ですか?
// TODO: is there a better syntax for this?
this.set(
'tags',
this.get('tags').push('newTag')
)
バックボーン モデルの配列にアイテムを追加するには、これが本当に最善の方法ですか?
// TODO: is there a better syntax for this?
this.set(
'tags',
this.get('tags').push('newTag')
)
次のように model.push を実装できます。
var model, Model;
Model = Backbone.Model.extend({
defaults: { tags: [] },
push: function(arg, val) {
var arr = _.clone(this.get(arg));
arr.push(val);
this.set(arg, arr);
}
});
model = new Model;
model.on("change:tags", function(model, newTags) {
console.log(newTags)
});
model.push("tags", "New tag1")
model.push("tags", "New tag2")
ただし、コレクションにタグを保存し、そのイベントをリッスンしてモデルtags
属性を更新する必要があるかもしれません。
var model, Model, Tags, Tag;
// Override id attribute for Tag model
Tag = Backbone.Model.extend({
idAttribute: "name"
});
Tags = Backbone.Collection.extend({model: Tag});
Model = Backbone.Model.extend({
initialize: function() {
this.tags = new Tags;
this.tags.on("add remove reset", this.updateTags, this);
},
updateTags: function() {
this.set("tags", this.tags.pluck("name"))
}
});
model = new Model;
model.on("change:tags", function(model, newTags) {
console.log(newTags)
});
// Reset tags
model.tags.reset([{name: "New tag1"}, {name: "New tag2"}]);
// Add tags
model.tags.add({name: "New tag3"});
// Remove tag
model.tags.remove(model.tags.get("New tag3"));
このような配列である属性を持つモデルがある場合
TestModel = Backbone.Model.extend({
defaults:{
return {
things:[]
}
}
});
モデルTestModel上のものにアイテムを追加する
var test = new TestModel;
test.set({things:item});