現在、Backbone アプリを作成しており、backbone.localstorage プラグインを使用してデータを永続化しています。私のアプリにはソート可能なアイテムがいくつかあるので、アイテムをソートするたびに localStorage のデータ順序も変わることを願っています。次にページ全体を更新すると、ソートされたデータによってページがレンダリングされます。しかし、backbone.localstorage は作成順にデータを保持するようです。誰かがこれについて私にいくつかのアイデアを教えてもらえますか?
1 に答える
モデルを明示的な順序で表示する場合はcomparator
、コレクションに を含め、場合によっては各モデルに位置番号を含めます。
ローカル ストレージは次のとおりです。
文字列のキーと値のペアを安全に保存し、後で使用するために取得できる手段。
キーと値のペアに注意してください。つまり、多かれ少なかれ、大きなハッシュ テーブルを扱っており、それらは通常順序付けされていません。さらに、細かい仕様から:
キーの順序はユーザー エージェントによって定義されますが、キーの数が変わらない限り、オブジェクト内で一貫している必要があります。(したがって、キーを追加または削除するとキーの順序が変更される場合がありますが、既存のキーの値を変更するだけでは変更できません。)
そのため、ローカル ストレージ内に特定の順序はありません。特定の注文が必要な場合は、自分で手配する必要があります。
あなたの場合、おそらくモデルにposition
orindex
プロパティがあり、配列インデックスのように動作します。次に、あなたのコレクションで:
comparator: function(m) { return m.get('position') } // or 'index'
2 つの引数comparator
関数を使用することもできます。
comparator: function(a, b) {
a = a.get('position');
b = b.get('position');
if(a < b)
return -1;
else if(a > b)
return 1;
return 0;
}
モデルを移動するときに位置インデックスを維持する必要がありますが、それはそれほど難しいことではありません。position
また、データをローカル ストレージから取り出した後、コレクションに入れる前にデータを並べ替えposition
、モデルをローカル ストレージに書き込むときに値を割り当てることもできます。