1

これが私のシナリオです:

Backbone.js を使用しています。

常にメモリに保持したくないデータの大規模なコレクションがいくつかあります。したがって、すべてのコレクションのすべてのモデルを常にメモリに保持するソリューションは適切ではありません。

これらのコレクションから任意のレコードを選択して表示および/または編集できるようにする必要があり、同じモデルの複数のビューで同じレコードを指す必要があります (同期を維持するため)。したがって、これらのモデルは、Model.fetch を実行するよりも、マスター コレクションからプルする方が適切です。

ここで、 {add: true}オプションとajaxデータ設定を組み合わせて使用​​することで、必要に応じて Collection.fetch を使用してこれらのレコードを取得できるようです。それが仕事をするなら、それは私が望むものの途中に私を得るでしょう.

問題は、特定の時点で、これらのコレクションの 1 つのピッカー リスト ビューを表示し、その特定のコレクションのすべてのレコードを一時的に表示する必要がある場合があることです (または、実際にはページ分割されたリスト)。大きい)。すべてを表示する必要があるときに、コレクション全体 (またはコレクションのページ) を取得できました。すばらしいです。しかし、そのピッカー ビューを使い終わったら、それらの余分なレコードを消去する必要があります。以前にフェッチした個々のレコード モデルの追跡を失うことなく、それらをスクラブするにはどうすればよいですか?

これまでのところ、私が思いついた最善の解決策は、アドホック レコードの配列を保持し、reset を呼び出してクリーンアップするときに、それをコレクションに渡すことです。これにはさらに、これらのモデルで何らかの参照カウントを保持する必要があるため、コレクションから削除するタイミングを知っています。それは私には多くの簿記のように思えます。これを処理するよりクリーンな方法はありますか?

4

1 に答える 1

0

あなたの最後のコメントを読んだ後、私はあなたを理解していると思います。したがって、質問を書き直そうとすると、次のようになります。

  • モデルがインスタンス化され、ローカル変数に割り当てられる
  • 他のモデルの中でも、すでにローカル変数に割り当てたモデルを含むコレクション

ただし、ローカル変数コレクション 内の同じモデルは異なるインスタンスであるため、1 つの参照の変更は他の参照には影響しません。そして、これはあなたが修正したいものです。

したがって、ローカル変数とコレクション内の参照が同じ参照になるようにする必要があります

1 つのアプローチとして、 内の Collection がinitialize()そのすべてのモデルをチェックし、最近フェッチされたモデルをすでにインスタンス化されているモデルに置き換えることができますid

そのために、すでにキャッシュされているモデルのリストを要求する方法がいくつかあります。しかし、この既にキャッシュされたモデルは、異なるビューなどへのローカル変数内のそれぞれのものであるため、ショットで完全なリストを取得できる一意の場所が必要になります。このユニークな場所は、 と呼ばれるコレクションにすることができますCachedModels

で、Model.initialize()現在のモデルを this に追加する行を追加できますCachedModelsCachedModelsまた、このコレクションをクリーンアップまたは削除したモデルを維持するように注意する必要があります。

これはあまり最適化された方法ではなく、簡単な方法でもありませんが、何らかの形で刺激を与えることができれば幸いです。

于 2012-06-02T08:29:42.140 に答える