Фильтр источника данных Kendo UI путем сравнения полей

У меня есть источник данных пользовательского интерфейса Kendo, и я хочу отфильтровать его, сравнив поля. Это мой источник данных:

var dataSource = new kendo.data.DataSource({
  data: [
    { appointment: "Hairdresser", start: new Date("somedate"), end:  new Date("somedate")},
    { appointment: "Meeting", start: new Date("somedate"), end:  new Date("somedate")},
    { appointment: "Shopping", start: new Date("somedate"), end:  new Date("somedate")}
  ]
});

И я хочу отфильтровать это так:

SELECT * FROM dataSource WHERE start > end;

dataSource.filter({
                "field": "start",
                "operator": "gt",
                "value": ?????
            });

Как я могу добиться этого с помощью фильтров?


person Karoline Brynildsen    schedule 11.03.2014    source источник


Ответы (2)


Это невозможно со встроенной фильтрацией. Вместо этого я бы предложил вам создать кнопку, которая при нажатии будет отправлять дополнительные параметры на сервер, где вы сможете выполнить такую ​​фильтрацию самостоятельно.

Чтобы отправить дополнительные поля и выполнить запрос на чтение, вы можете сделать это следующим образом.

dataSource.read({ myCustomFilter:true });
person Petur Subev    schedule 11.03.2014
comment
Я подозревал это :( Я не хочу выполнять фильтрацию на стороне сервера, потому что хочу сохранить исходный набор данных в контексте. - person Karoline Brynildsen; 11.03.2014

Если вы хотите сделать это на стороне клиента, я бы предложил использовать что-то вроде метода lo-dash filter ( или, в зависимости от поддерживаемых браузеров, просто нативный Array.filter) для реализации вашего фильтра.

Вы можете хранить все данные во внешнем массиве и хранить только отфильтрованные данные в источнике данных, привязанном к пользовательскому интерфейсу (обновление с помощью dataSource.data()):

var data = [{
    name: 'barney',
    age: 36,
    start: new Date(2011, 1, 1),
    end: new Date(2012, 1, 1)
}, {
    name: 'fred',
    age: 40,
    start: new Date(2011, 1, 1),
    end: new Date(2010, 1, 1)
}];

var filtered = _.filter(data, function (item) {
    return item.start > item.end;
});

dataSource.data(filtered);
person Lars Höppner    schedule 11.03.2014
comment
Привет, да, это что-то похожее на то, что у меня получилось. - person Karoline Brynildsen; 12.03.2014