コンパレーターはモデル ID を探しています。
comparator: function (model) {
return -model.get('id');
}
しかし、どのモデルにもid
属性がありません。通常、id
はサーバーから取得されるため、サーバーはid
コレクションのブートストラップ時に初期値を提供し、モデルの作成id
時に (サーバーによって) 新しい が割り当てられます。save
データに s を追加するid
と、物事がより理にかなったものになります。
また、フィドルを次のように調整する必要があります。
this.listenTo(this.collection, 'add', this.render);
それ以外の:
this.listenTo(this.collection, 'add', this.renderBook);
編集パネルはすべての HTML を削除し、コレクション全体を再レンダリングする必要があるためです。
それを過ぎると、編集リンクが機能しなくなっていることがわかります。これは、ビューの内容をいじりながらビューを再利用しようとしているからですel
。代わりに、次のことを行う必要があります。
- ビューを再利用しようとするのはやめましょう。手間をかける価値はほとんどありません。
- 各ビューに固有の
el
.
view.remove()
新しいビューを共通コンテナーに入れる前に、ビューを削除するために呼び出します。
- 次に、新しいビューを作成してレンダリングし
el
、コンテナに入れます。
すべてのビューが共通のコンテナーを共有しているため、コレクション ビューをコレクションのイベントにバインドする必要がなくなり、'add'
代わりにビュー全体を破棄して再構築することがわかります。