Я пытаюсь программно установить значение фильтра пользовательского фильтра Kendo Grid. Я применяю свои новые значения фильтра, например:
gridOptions.dataSource.filter = [
{
field: 'MyField',
operator: 'eq',
value: newTextValue
}
];
Мое определение поля в параметрах сетки выглядит так:
{
width: '140px',
title: 'MyFieldTitle',
field: 'MyField',
filterable: getFieldFilter()
}
Со следующим фильтром:
function getFieldFilter() {
return {
cell: {
template: function (args) {
var element = args.element;
element.kendoComboBox({
dataSource: {
transport: {
read: 'api/Items'
}
},
valuePrimitive: true,
dataTextField: 'Description',
dataValueField: 'Code'
});
},
showOperators: false
}
};
}
Если я применю фильтр, как показано выше, он сработает только после того, как я щелкну поле kendoComboBox в столбце и снова щелкну вне его. Моя первоначальная мысль заключалась в том, что сетка кендо не будет применять dataValueField
, а просто установит dataTextField
. Когда я проверял запросы, которые сетка кендо отправляет на сервер, я увидела, что она отправляет значение, хранящееся в самом kendoComboBox (текст), а не значение, стоящее за ним.
Если я выбираю что-то в kendoComboBox из пользовательского интерфейса, все работает нормально. Но если я установлю его программно, как указано выше, это не так.
Нужно ли обновлять какое-то состояние, чтобы kendoComboBox обновил свое внутреннее значение, или как решить эту проблему?
EDIT: я пытаюсь получить значение kendoCombobox
из сетки.
var currentlyAppliedFilters = grid.dataSource.filter().filters;
for (var filter of currentlyAppliedFilters) {
if (filter.field === 'MyField') {
var currentlyApplied = filter.value;
}
}
Таким образом, приведенный выше код даст мне свойство Description
элементов в kendoCombobox
, но на самом деле я хочу получить свойство Code
.