backbone.js Collection
の真ん中に新しいモデルアイテムを挿入し、新しいアイテムを正しい位置に含めるようにコレクションのView
を更新する簡単な方法はありますか?backbone.jsコレクションにアイテムを挿入する
私は、リストからアイテムを追加/削除するためのコントロールを行っています。各リストアイテムにはそれぞれModel
とView
があり、コレクション全体にはView
もあります。
各アイテムビューには、アイテムのモデルをクローン化し、クリックされたアイテムの下のインデックス位置のコレクションに挿入するDuplicate
ボタンがあります。
アイテムをコレクションに挿入するのは簡単でしたが、コレクションビューを更新する方法がわかりません。
ListView = Backbone.View.extend({
el: '#list-rows',
initialize: function() {
_.bindAll(this);
this.collection = new Items();
this.collection.bind('add', this.addItem);
this.render();
},
render: function() {
this.collection.each(this.addItems);
return this;
},
addItem: function (item) {
var itemView = new ItemView({ model: item }),
rendered = itemView.render().el,
index = this.collection.indexOf(item),
rows = $('.item-row');
if (rows.length > 1) {
$(rows[index - 1]).after(rendered);
} else {
this.$el.append(rendered);
}
}
}
この実装は、作業の一種であるが、私は新しい項目を追加するとき、私は奇妙なバグを取得しています:私はこのような何かをしようとしてきました。私はそれらを並べ替えることができると確信していますが、...
私の頭の中には、これを行うためのよりよい方法があることを伝え続けています。手動でどこに新しいItemView
を挿入するのか把握しているのは本当にうんざりしているようです。コレクションビューでコレクションを再レンダリングする方法は分かりませんでしたか?
提案がありますか?
これを動作させるには、 'render'メソッドの中で'(.item-row).remove() 'の呼び出しを追加する必要がありましたが、それは良い解決策です。 (さもなければ、再レンダリングされたアイテムは、既存のレンダリングされたアイテムの最後に追加されていました。)助けてくれてありがとう! –
ああ、 '$ el.empty()'を実行してコレクションをループする前に '$ el'をクリアすることができます:) – sntran
これは、現在コレクションにアイテムを追加する方法です。新しいアイテムをコレクションの正しい場所に置いています。私は上記のコメントに2つのタイプミスがあることに気付きました。最後にコレクションがレンダリングされたときに作成されたアイテムを削除するには '$( '。item-row')。remove()を呼び出します。表示をリセットするだけです。それを考えると、私がしたいことをするかもしれない 'リセット'メソッドがあります。私はそれを呼び出して、 'render'を呼び出してみます。 –