Как заставить igniteui dataSource 2013.2 использовать локальный кеш браузера?
Мне нужно создать источник данных REST в двух случаях:
- когда в кеше локального браузера ничего нет - стандартный путь через ds.dataBind()
- когда что-то есть - предварительно загружая ранее кэшированный json, вы получите это.
Кеш браузера может быть любым кешем браузера. Я предпочитаю местный корм.
Есть ли какой-либо способ через публичный API вставить массив json в REST ds после его создания и перед databind(), чтобы предотвратить любой исходный вызов GET/databind?
2 ответа
Там нет ничего встроенного для igDataSource
обрабатывать кэшированные данные по запросам. Мое предложение будет использовать jQuery.ajaxSetup
перехватывать запросы и использовать кэшированные данные, если таковые существуют в localStorage
или где-нибудь еще.
$.ajaxSetup({
beforeSend: function (jqXHR, settings) {
// return from local storage instead of initiating the request
}
});
Я пришел к выводу, что это невозможно сделать (на уровне $.ajax), потому что возврат из beforeSend не отменяет запрос. С другой стороны, прерывание запроса (jqXHR.abort()) прерывает весь конвейер запроса, который прерывает выполнение всех других обратных вызовов $.ajax, что является тупиком - тогда весь конвейер dataSource прерывается, что мешает мне получить какой-либо результат,
Единственным решением на данный момент является создание другого типа источника данных (JSON ds) во время создания сетки (в моем случае это ds для комбо).
Обновление Это совсем не невозможно, но конвейер, состоящий из методов _remoteData->_processRequest->_successCallBack->CompleteCallBack, должен быть абстрагирован в классе, подобном конечному автомату. Проблема заключается в том, что конечный автомат реализован через $.ajax, который на самом деле не предназначен для такого сценария, и взломать его - не очень хорошая идея.
Если есть облегченная библиотека js, то это можно сделать.