1

こんにちは、私は backbone.js に少し慣れていません

コレクションからアイテム (およびそのアイテムのみ) を削除する方法はありますか?リストを更新する必要はありません。代わりに、ビューとコレクションからそのアイテムを削除するだけで、ビュー コレクションの更新/再レンダリングは行われません。それとも可能ですか?

これが私のコードのスニペットです:

var DateModel = Backbone.Model.extend({
    defaults: function() {
        return {
            index: '',
            valueFrom: '',
            valueTo: '',
            status: '',
            showText: '',
            text: ''
        }
    },
});

var DateList = Backbone.Collection.extend({
    model: DateModel
});

var dateList = new DateList();

var DateView = Backbone.View.extend({
    model: new DateModel(),
...
});

var DateListView = Backbone.View.extend({
    model: dateList,
    el: $('#date-list-container'),
    initialize: function() {
        this.listenTo(this.model, 'add', this.render);
        this.listenTo(this.model, 'remove', this.render);
        this.listenTo(this.model, 'reset', this.render);
    },
    render: function() {
                // code for rendering here...
                _.each(this.model.models, function(date){...});
            }
 });
4

1 に答える 1

1

これを行うには、イベント リスナーをthis.render、削除されたモデルを引数として受け取るカスタム リスナー関数に変更し、ビュー全体を再レンダリングする代わりに、そのモデルを表す HTML 要素をビューから単純に削除します。そうすれば、コストがかかる可能性があるビュー全体を常に再レンダリングする必要はなく、変更された部分のみを変更できます。

たとえば、次の行です。

this.listenTo(this.model, 'remove', this.render);

removeイベントの引数を受け取る別のイベント ハンドラー関数に置き換えられます。

remove (モデル、コレクション、オプション) — モデルがコレクションから削除されたとき。

したがって、次のようなイベント リスナー関数があるとします。

modelRemoved: function(model, collection, options) {
  // code to find the HTML element for 'model' and remove it from the DOM
}

そして、削除イベントのイベント ハンドラーとして使用します。

this.listenTo(this.model, 'remove', this.modelRemoved);
于 2013-04-09T05:36:19.217 に答える