Kendo DataSource: как установить фильтры перед извлечения без отправки двух http-запросов
Окружающая среда:
- версия кендо: 2013.1.319
-
dataSource:
productsDataSource = new kendo.data.DataSource({
type: "odata",
transport: {
read: "http://www.mydomain.com/odata.svc/products",
dataType: "json",
contentType: "application/json"
}
schema: {
type: "json",
data: function(data){
return data.value;
},
total: function(data){
return data['odata.count'];
},
model: product
},
pageSize: 50,
serverPaging: true,
serverFiltering: true,
serverSorting: true
});
-
Получить данные:
productsDataSource.filter([{поле: "Id", оператор: "eq", значение: 5}]);//это отправит httprequest
productsDataSource.fetch(функция (e) { tempDataStorage = e.items; // больше логики для обработки данных;
});
-
проблемы:
- необходимо использовать метод выборки dataSource для обработки данных (инициализация виджета, привязка данных и т.д.);
- избегать отправки двух http-запросов при настройке фильтров перед выборкой;
- условие фильтра необходимо изменить во время выполнения.
Ответы
Ответ 1
productsDataSource._filter = { logic: 'and', filters: [
{ field: "Id", operator: "eq", value: 5 }]};
Я нашел, что это работает. Установите внутреннее свойство в полный объект фильтра. Затем вы можете вызвать выборку. Я еще не нашел способ изменить размер страницы, не вызывая при этом выборку.
Ответ 2
Вы можете filter
в конфигурации DataSource
. Это должно выдавать только один запрос с условиями фильтрации, которые вы указываете в конфигурации DataSource
.
Ответ 3
Задайте поле _filter в источнике данных с помощью productsDataSource._filter = [{ field: "Id", operator: "eq", value: 5 }];
, а затем вручную инициируйте запрос на удаленные данные, когда будете готовы, используя productsDataSource.read();
Ответ 4
Я думаю, что изменить параметр _filter не рекомендуется. Команда telerik должна обеспечить лучший способ манипулировать массивом фильтров до операции привязки.
метод фильтра вызывает вторую операцию сервера, это не очень хорошо.
теперь изменение _filter кажется единственным решением, но, обратите внимание, они могут изменить имя этой переменной в будущем, и ваше приложение может сломаться тогда.
Ответ 5
Даже если это старый вопрос, он попадает в результаты Google. Так что даже если я не знаю, действительно ли это для версии кендо: 2013.1.319, но в настоящее время существует метод
dataSource.query({
sort: { field: "ProductName", dir: "desc" },
page: 3,
pageSize: 20
});
Это может установить несколько параметров, таких как сортировка, фильтрация подкачки и т.д. в одном вызове и возвращает обещание.
http://docs.telerik.com/kendo-ui/api/javascript/data/datasource#methods-query
Ответ 6
Присвойте прослушиватель событий источнику данных, который инициализирует виджет, а затем использует метод фильтрации.
datasource.one('requestEnd', function(){
// initialize or/and bind widget
});
datasource.filter({ /*your filter*/ })