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*/ })