0

本のリストを表示する Backbone アプリを作成していますが、新しい本を追加すると、[編集] ビューで、彼はリストの一番上ではなく一番下に移動します。したがって、基本的には Comparator を使用してコレクションの順序を逆にしたいのですが、試してみましたがうまくいきません:

comparator: function (model) {
    return -model.get('id');
}

ここにすべてのコードを含む JSFiddle があります: http://jsfiddle.net/swayziak/9R9zU/4/

問題がコンパレータのみに関連しているのか、コードの他の部分で何かを変更する必要があるのか​​ わかりません。

4

2 に答える 2

2

コンパレーターはモデル 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。代わりに、次のことを行う必要があります。

  1. ビューを再利用しようとするのはやめましょう。手間をかける価値はほとんどありません。
  2. 各ビューに固有のel.
  3. view.remove()新しいビューを共通コンテナーに入れる前に、ビューを削除するために呼び出します。
  4. 次に、新しいビューを作成してレンダリングしel、コンテナに入れます。

すべてのビューが共通のコンテナーを共有しているため、コレクション ビューをコレクションのイベントにバインドする必要がなくなり、'add'代わりにビュー全体を破棄して再構築することがわかります。

于 2013-08-14T03:23:14.827 に答える
2

prepend代わりにシンプルにしないのはなぜですかappend

this.$el.prepend(
于 2013-08-13T22:53:38.490 に答える