2013-04-04 2 views
0

Я разрабатываю приложение с бризом. Мне нужно получить объект с идентификатором = 123 в локальном кэше, так что я в конечном итоге с 1-го сценария:Нажатие F5 после «EntityQuery.fromEntityKey», похоже, очищает локальный кеш с бризами

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 в undefined.

Мой вопрос: почему обновление браузера во втором сценарии, похоже, устраняет локальный кеш-ветер? Как действовать, чтобы избежать такого поведения?

Спасибо.

ответ

2

Бриз всегда очищает локальный кеш при нажатии F5. F5 заставляет браузер перезагружать всю страницу и выполняется каждая страница js (начиная с main.js).

Вы видите другое поведение, потому что третий параметр в функции fetchEntityByKey указывает Breeze на поиск в локальном кеше, а если не найден, сделайте запрос на сервер.

В своем втором сценарии вы рассказываете Бриз об извлечении объекта из локального кэша (.using (breeze.FetchStrategy.FromLocalCache);) и из-за этого, если объект не находится в локальном кеше, Бриз никогда не попадет на сервер.

+0

Это ясно для меня сейчас. Спасибо. – Bronzato

Смежные вопросы