コンパレーターはモデル 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'代わりにビュー全体を破棄して再構築することがわかります。