私はあなたのケースでコレクションマネージャーの並べ替えを実装します:
var manager = (function(){
var constructors = {
'example': ExampleCollection
};
var collections = {};
return {
getCollection: function(name) {
if(!collections[name]) {
var collection = new constructors[name]();
collection.fetch();
collections[name] = collection;
}
return collections[name];
}
}
})();
をここで管理者がコレクションをインスタンス化し、それらを取得する責任があります。電話をしたとき:
var exampleCollection = manager.getCollection('example');
データがすでに取得されているサンプル収集のインスタンスが表示されます。このコレクションが再度必要なときはいつでも、メソッドを再度呼び出すことができます。その後、再度フェッチする必要はなく、まったく同じインスタンスを取得します。
これは非常に単純な管理者の例であり、実装して拡張することができる多くの追加機能があります。
私はこの問題をより低いレベル(例えば、$ .ajaxのトランスポート層)で処理しないことを強くお勧めします。これを行うと、コレクションが複数回取得されるのを防ぐことができますが、アプリケーションの周りに同じIDを持つ異なるモデルインスタンスが存在することになります。すべてのコレクションインスタンスは独自のモデルを作成します。
私が現在取り組んでいるCouchAppでは、異なるコレクションのモデルインスタンスが重複しないようにする必要があることも発見しました(異なるDBビューは同じモデルデータを返すことができます)。これはマネージャに別のコレクションを持ち、既にアプリケーションにロードされているすべてのモデルを追跡することで解決されています。
最後に、コレクションまたはサーバーからのコレクションの更新を処理するマネージャーにリフレッシュメソッドを実装することを検討してください。 fetchメソッドでこれを行うと、コレクション全体がリセットされ、すべてのモデルが破棄されてから再作成されます。これは、このコレクションのモデルが(通常はそうであるように)アプリ内の別の場所で参照されていると悪いことです。それらのインスタンスは、あなたのアプリで時代遅れになり、複製されます。リフレッシュメソッドは、着信IDを持つインスタンスがすでにキューイングコレクションに存在するかどうかをチェックします。そうであれば更新され、そうでなければ追加されます。
バウンティはONです!この件についてもう少し意見をいただきたい! – Industrial
localStorageを使用してコレクションをブラウザにキャッシュしたままにするか、コレクションがシングルトンであることを確認してください。常にフェッチされた同じインスタンスを呼び出す必要がありますか? –