2

私はこのコレクションを持っています:

var items = new bb.Collections.QuotesCollection([
    {id: 1, name: "item 1", units: []},
    {id: 2, name: "item 2", units: []},
    {id: 3, name: "item 3", units: []}
]);

そして、次のように配列「units」を出力します。

if(this.model.get('units').length){
        $(this.el).append('<strong>Units</strong>');
        $(this.el).append('<ul>');
        for(x in this.model.get('units')){
            $(this.el).append('<li class="unit">' + this.model.get('units')[x] + '</li>');
        }
        $(this.el).append('</ul>');
    } 

上記のコードはPOCのものにすぎないため、正式なテンプレートはまだ作成されていません。

events: {
    "keypress #addUnit" : "addUnit",
    "dblclick .unit" : "deleteUnit"
},

deleteUnit: function(){
    this.render(); // what do I put here!?
}

「units」配列からアイテム(クリックされたもの)を削除するには、どのような方法がありますか?

4

3 に答える 3

2

これは迅速で汚い方法です:

アレイの順序が他のメディアを介して変更されていないと仮定すると、次のことができます。

deleteUnit: function() {
  // get the index of the li you are clicking
  var index = $('.unit').index(this);
  this.model.get('units').splice(index, 1);
  this.render();
}

このように、すべてのレンダリングの前にビュー要素を空にすることを忘れないでください

render: function() {
  this.$el.empty();
  ...
  // business as usual
}
于 2012-12-03T12:09:19.657 に答える
1

まず、モデルごとにビューオブジェクトが必要になる可能性があるため、を所有し<ul>、次のようなコレクションビューを作成します。

var ParentView = Backbone.View.extend({
  render: function() {
    var html = '<ul></ul>'; // make your html here (usually with templates)
    this.$el.append(html);        
    this.collection.each(_.bind(this.initChild, this));
    return this; // so we can chain calls if we want to.
  }
  initChild: function(model) {
    var child = new ChildView({ model: model });
    // this.$() is scoped to the view's el property
    this.$('ul').append(child.render().el);
  }
});

次に、子ビューを次のように設定します。

var ChildView = Backbone.View.extend({
  events: { 'click .delete', 'deleteModel' },
  render: function() {
    var html = '';// make your html here (usually with templates)
    this.$el.append(html);
    return this;
  },
  deleteModel: function(ev){
    ev.preventDefault();
    // Removes form the collection and sends an xhr DELETE
    this.model.destroy(); 
    this.$el.remove();
  }
});

Model#destroyを呼び出すと、コレクションから削除され、サーバーにDELETEが送信されます(コレクション/モデルにURLが設定されている場合)。

于 2012-12-03T12:00:08.860 に答える
0

私が理解している限り、モデルからアイテムを削除する必要があります

Person = Backbone.Model.extend({ initialize: function() { alert("Welcome to this world"); } }); var person = new Person({ name: "Thomas", age: 67}); delete person.name

于 2013-07-04T05:03:42.680 に答える