2012-04-25 3 views
6

コレクションの最初にアイテムをレンダリングしようとしています。 Facebookの新記録)コレクションの始めに新しいレコードを表示しようとするバックボーン(マリオネットも同様)

私は(応答、{at:0});レコードがコレクションに正しく挿入されますが、アイテムのリストの一番下にレンダリングされます。私は前にこの作業をしていたので混乱していますが、私がハッキースタイルでやっていたことは、コレクションをリセットして再レンダリングしただけだと思います。

これを処理するにはどのようなきちんとした方法が必要か、論理をどこにバインドする必要があるのでしょうか。

コレクションの追加方法はありますか?現在これは空ですが(私はMarionetteを使用しています)、私はこれがバックボーンのデフォルトレンダリングよりも優先されると感じています。どうすればそれをもう一度制御することができるので、新しいアイテムをすべて削除して再作成せずに、リストに追加することができます。

答えて

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関数内で行うこともできます。もちろん、これはappendの代わりにprependを行うより複雑ですが、それでも可能です。

希望に役立ちます。

+0

返信いただきありがとうございます。これは今後有益になると思います! –

+0

@ChrisBarryは、レンダリングされたコレクションにアイテムを順番に挿入する方法については、https://github.com/derickbailey/backbone.marionette/issues/78のスレッドも参照してください。 –

+0

しかし、appendをprependに置き換えると、レンダリング時に順序が変わるでしょうか? – Herokiller

関連する問題