7

コレクションの開始時にアイテムをレンダリングしようとしています (Facebook に新しいレコードを投稿している場合を想像してください)

add(response, {at: 0}); に来たら コレクションに挿入すると、レコードはコレクションの 0 に正しく挿入されますが、アイテムのリストの一番下にレンダリングされます。以前はこれが機能していたので混乱していますが、ハッキーなスタイルで行っていたのは、コレクションをリセットして再レンダリングしただけだと思います。

これを処理するためのきちんとした方法と、ロジックをどこにバインドする必要があるのか​​ 疑問に思っています。

コレクションの add メソッド上ですか?現在、これは空です (ただし、Marionette を使用しています)。これにより、バックボーンのデフォルトのレンダリングが上書きされるように感じます。すべてを破棄して再作成することなく、新しいアイテムをリストに正しく追加できるように、再びそれを制御するにはどうすればよいですか。

4

2 に答える 2

12

Marionette では、ビューのコレクションに新しいアイテムを追加するデフォルトの方法は、jQuery のappendメソッドを使用することです。型には、実際の追加を行うために使用されるメソッドCollectionViewが呼び出されます。appendHtml( http://derickbailey.github.com/backbone.marionette/docs/backbone.marionette.html#section-24を参照)

ただし、特定のコレクション ビューでこのメソッドを簡単にオーバーライドして、必要な場所に新しいモデルを追加することができます。

あなたの場合、常に新しいモデルをリストの先頭に追加したい場合は、コレクション ビューを変更してこれを行うのは非常に簡単です。

Backbone.Marionette.CollectionView.extend({
  appendHtml: function(cv, iv){
    cv.$el.prepend(iv.el);
  }
});

cvはコレクション ビュー インスタンスでありiv、コレクション内のモデルのアイテム ビュー インスタンスであることに注意してください。

HTML ノードの既存のコレクション内で正確な位置を見つけるなど、より複雑なことを行う必要がある場合は、appendHtml関数内でそれを行うこともできます。もちろん、これは追加の代わりに前に追加するよりも複雑になりますが、それでも可能です。

それが役立つことを願っています。

于 2012-04-26T01:23:40.200 に答える