0

私はそよ風でアプリケーションを開発しています。ローカル キャッシュで id=123 のエンティティを取得する必要があったため、最初のシナリオは次のようになりました。

return manager.fetchEntityByKey("Transport", 123, true) // 3rd param is true --> local cache
              .then(fetchSucceeded)
              .fail(queryFailed);

function fetchSucceeded(data) {
        var s = data.entity;
        return s.isPartial() ? refreshTransport(s) : transportObservable(s);
}

次に、いくつかのプロパティを拡張する必要があったため、最終的に 2 番目のシナリオになりました。

var entityType = manager.metadataStore.getEntityType("Transport");
var entityKey = new EntityKey(entityType, 123);
var query = EntityQuery.fromEntityKey(entityKey)
                       .expand("Sender.City, Sender.City.Country")
                       .using(breeze.FetchStrategy.FromLocalCache);

return manager.executeQuery(query)
              .then(fetchSucceeded)
              .fail(queryFailed);

function fetchSucceeded(data) {
     var s = data.results[0];
     return s.isPartial() ? refreshTransport(s) : transportObservable(s);
}

2 つのシナリオでいくつかのテストを実行し、ブラウザーを更新 (F5) すると違いに気付きました。

1 番目のシナリオ: F5 キーを押すと、クエリはローカル キャッシュ内のデータを取得できます。そのため、ユーザーは F5 を複数回押すことができ、そよ風は引き続きローカル キャッシュを使用します。

2 番目のシナリオ: F5 を押したとき: クエリがローカル キャッシュに何も見つからずfetchSucceed、エラーが発生しs.isPartial()たため、 s in undefined.

私の質問: 2 番目のシナリオでブラウザーを更新すると、ローカル キャッシュの微風がクリアされるように見えるのはなぜですか? この動作を回避するにはどうすればよいですか?

ありがとう。

4

1 に答える 1

2

F5 キーを押すと、Breeze は常にローカル キャッシュをクリアします。F5 を押すと、ブラウザーはページ全体をリロードし、すべての js ページが実行されます ( main.js から開始)。

fetchEntityByKey 関数の 3 番目のパラメータが Breeze にローカル キャッシュを検索し、見つからない場合はサーバーにリクエストを送信するように指示しているため、異なる動作が見られます。

2 番目のシナリオでは、ローカル キャッシュ ( .using(breeze.FetchStrategy.FromLocalCache); ) からエンティティをフェッチするように Breeze に指示しています。そのため、エンティティがローカル キャッシュにない場合、Breeze はサーバーにヒットしません。

于 2013-04-04T09:19:33.097 に答える