2012-01-22 1 views
0

У меня есть Djo Datagrid, связанный с JsonRestStore с включенным ClientFilter. поведение я хочу:Dojo JsonRestStore и ClientFilter никогда не обновляется с сервера

Каждый раз, когда я вызываю фильтр на DataGrid, магазин должен выполнить запрос локально и обновлять сетку. Между тем он также должен отправить тот же запрос на сервер, добавив данные, которые он получает клиенту. отфильтрованные данные.

Документация ClientFilter, по-видимому, говорит, что именно так оно и должно работать. Это поведение я получаю:

сетке данных загружает данные с сервера один раз, в соответствии с начальных настроек фильтра. Любые дополнительные вызовы только для datagrid.filter фильтруют данные на клиенте. Больше никаких вызовов XHR на сервер не отправлено .

Я провел часы отладки ClientFilter.js, ища ошибку, но не могу ее найти. Что я делаю не так?

EDIT: Я хочу поставить это здесь так, надеюсь, кто-то ищет подобную информацию тоже не застрянет. Известны проблемы с ClientFilter и JsonRestStore. Смущенный всей старой документацией в Интернете, я использовал dojo.data.JsonRestStore Это старый и неподдерживаемый (?) Магазин. Теперь Dojo перешел в новый API ObjectStore. Ближайший магазин реализации этого нового API является dojo.store.JsonRest и функциональность ClientFilter обеспечивается dojo.store.Cache

+0

Что я хочу, скажу, что я фильтрую в зависимости от даты создания. Если я уменьшу фильтр, он должен фильтровать на стороне клиента и передать его мне, но если я увеличу диапазон фильтра, он должен получить больше результатов от сервера. Разве это не что-то довольно рутинное? – navjotk

+0

Объяснение варианта использования немного больше: я фильтрую два поля fromDate и toDate. Первоначально fromDate = 2012-01-20 и toDate = 2012-01-24. Это дает мне соответствующие результаты с сервера. Теперь, если я изменил fromDate на 2012-01-21, магазин фильтрует набор данных на клиенте и показывает результаты. Это требуется поведением. Если я изменил fromDate на 2012-01-19, ожидаемое поведение будет состоять в том, чтобы магазин запрашивал больше данных с сервера. Вместо этого хранилище просто возвращает все данные, которые он имеет в кеше (который не включает данные для 19-го числа). – navjotk

ответ

1

К сожалению, в dojox.data.JsonRestStore все, что было в кэше остаются в кэше, и вы не можете очистить Насколько я знаю, предмет или запрос. Вы можете попробовать clearCache(), если вы легко полагаетесь на кеширование, это может сработать. В противном случае вам нужно будет взломать JRS, чтобы получить реальный clearCache в зависимости от ваших потребностей. Чтобы достичь чего-то похожего на вашу потребность, вы можете подключиться к фильтру и задать тот же запрос в магазине с небольшим добавлением, например «& date =» + (новая дата(). ToString()) или что-то например, чтобы принудительно обновить ... Не уверен, что это полностью решит вашу проблему, и это будет своего рода победой цели вашего кеша, за исключением быстрой загрузки первого фильтра. Я даже не уверен, что принудительный запрос обновит ваш datagrid ... но вы можете попробовать.

+0

Моя идея здесь - использовать кеш для отображения начальных результатов для каждого запроса как можно скорее. Чтобы это действительно помогло людям, кеш пришлось бы использовать сильно, поэтому clearCache, вероятно, не вариант. – navjotk

+0

Тогда вы можете попробовать, что я сказал о подключении к фильтру, и выдать новую выборку, добавив параметр date/timestamp, чтобы он сначала загрузил ваш кеш, а затем обновил его с помощью даты выборки +, но я никогда не пробовал это раньше :) – PEM

+0

Я не уверен, что подход будет работать либо потому, что параметры GET URL-адреса изменяются между двумя запросами (см. Комментарий к исходному вопросу). Моя проблема заключается не в том, что браузер кэширует ответ с сервера, а в том, что хранилище не пытается извлечь новые данные с сервера (я использую Firebug, чтобы убедиться). Вы думаете, что изменение URL-адреса поможет? – navjotk