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);
}

接下来我需要扩展一些属性,所以我最终得到了第二种情况:

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) 时注意到了差异。

第一种情况:按 F5 时:查询能够检索本地缓存中的数据。所以用户可以按多次F5,微风仍然会使用本地缓存。

第二种情况:当按 F5 时:查询在本地缓存中没有找到任何东西,然后fetchSucceed发生错误,s.isPartial()因为 s in undefined

我的问题:为什么在第二种情况下刷新浏览器似乎会清除本地缓存的微风?如何继续避免这种行为?

谢谢。

4

1 回答 1

2

Breeze 总是在按下 F5 时清除本地缓存。F5 使浏览器重新加载整个页面并执行每个 js 页面(从 main.js 开始)。

您会看到不同的行为,因为 fetchEntityByKey 函数中的第三个参数指示 Breeze 搜索本地缓存,如果未找到,则向服务器发出请求。

在第二种情况下,您告诉 Breeze 从本地缓存( .using(breeze.FetchStrategy.FromLocalCache); )中获取实体,因此如果实体不在本地缓存中,Breeze 将永远不会命中服务器。

于 2013-04-04T09:19:33.097 回答