1

バックボーン モデルの配列にアイテムを追加するには、これが本当に最善の方法ですか?

// TODO: is there a better syntax for this?
this.set(
    'tags',
    this.get('tags').push('newTag')
)
4

2 に答える 2

5

次のように 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"));
于 2012-11-25T17:14:51.237 に答える
0

このような配列である属性を持つモデルがある場合

TestModel = Backbone.Model.extend({
  defaults:{
    return {
       things:[]
    }
  }
});

モデルTestModel上のものにアイテムを追加する

var test = new TestModel;
test.set({things:item});
于 2012-11-25T16:46:59.000 に答える