2012-11-01 10 views
6

モデルをコレクションに追加する際にコレクションを追加するためのエレガントな方法を探しています。バックボーンのソースコードには、これを行う方法がunshiftですが、コレクションにモデルを追加する方法はaddです。単純に拡張するには複雑すぎます。私は写真やつぶやきに依存するスライドショーを作成していますし、常に最新のものを一番上に表示する必要があります。私の問題の簡素化:コレクションにモデルを追加する

アプリ、API呼び出しが戻る初期化:だから

apple, banana, lemon 

を、Appleは最新のスライドです。コレクションが構築されています:

orange 

コレクションモデル追加:

apple, banana, lemon 

は、インターバルの後、API呼び出しのチェックが新しい果物、結果がある場合

私が欲しいものではありません
(apple, banana, lemon), orange 

。オレンジは新鮮な果物、その後はリンゴです。しかし、この場合は、スライドを描くときに追加して元に戻す前に最初のコレクションを元に戻すことができます。さて、物事は(私は明確にするために括弧を追加しました)、より複雑な取得:

API呼び出しのチェックをしてもより多くの果物のために:

((apple, banana, lemon), orange), pineapple, kiwi 

だから今:

pineapple, kiwi 

コレクションは、新しいモデルを一つずつ追加します新しいものから古いものまで、私のコレクションは次のようになります:

((not so old, older, oldest), pretty new), brand new, new 

これはまったく意味がありません:)

もちろん、APIの応答を変更すると自分の人生が楽になるかもしれませんが、現在のところオプションではありません。また、それは応答の項目の順序が新しい - >私が上手である古いので、本当に重要ではありません。

これのための解決策を見つけることができず、バックボーンソースの一部を新しいモデルunshiftにクローニングすることで過度に複雑にしたくありません。提案?ありがとう!

+1

?ドキュメントから "コレクションの先頭にモデルを追加します。追加と同じオプションが使用されます。" – JayC

+0

モデルをコレクションに手動で追加するわけではないので、間隔を使用してサーバーからjsonを取得し、各オブジェクトをモデルとしてコレクションに追加します。私は介入し、 'unshift'を使用することができますが、それは私のコードを複雑にするでしょう(私のAPIエンドポイントは私のコレクションの実際の表現ではないことを指摘しておいたはずです、それは一種の「ストリーミング」コレクションです) – Phortuin

答えて

5

モデルに何らかの種類の日付または時刻が関連付けられている場合(実際には必要に応じて手動で追加することもできます)、コレクションにcomparator関数を実装して並べ替えることができます。参照:

`unshift`動作しませんどのようにhttp://backbonejs.org/#Collection-comparator

+1

ありがとう!!どのように私はドキュメントでそれを見落としたか分からない。問題が解決しました: 'this.collection.comparator = function(model){return -model。時間をもらう"); } ' – Phortuin

+0

reverse created_atコンパレータが動作しない人には、ネゲートする前に文字列を解析するのを忘れないでください! '' function(model){return -Date.parse(model.get( 'created_at'))} '' ' –

関連する問題