У меня есть сетка кендо с столбцом, который использует combobox, который привязан к объекту под названием «Рабочий» (ID, «Имя пользователя»). Это прекрасно работает, за исключением случаев, когда пользователь устанавливает текст combobox в строку (пример: «xxxx»), которая не соответствует ни одному варианту выпадающего списка. Набор combobox устанавливает значение Worker в строку ('xxxx') вместо объекта Worker, после чего источник данных перестает отвечать на запросы, когда он получает искаженные данные.Kendo grid combobox отправляет неопределенные данные в DataSource
Я получил это, чтобы работать в событии «change» dataSource, которое запускается после события «Сохранить» сетки. Свойство нарушившей DataItem перезаписано с переменной myWorkerStart (захваченной в случае редактирования сетки в):
myDataSource.bind("change", function (e) {
if (e.field) {
if (e.field == "Worker") {
rowDataItem = myGrid.dataItem(myGrid.tbody.find("tr.k-grid-edit-row"));
var currentWorker = rowDataItem.Worker;
var myType = $.type(currentWorker);
if (myType != "object") {
alert('Ooooh, BAD worker, reverting to starting value');
rowDataItem.set('Worker', myWorkerStart);
}
}
}
alert("datasource change");
})
Я видел эту тему в пару нитей на форумах Telerik, в основном без ответа. Поддержка Telerik сообщила мне, что я должен обращаться к неопределенным значениям в событии «Сохранить» сетки, но это срабатывает до того, как строка задана с помощью combobox. Я могу видеть значения, но я не уверен, где значения могут быть установлены для предотвращения отправки неопределенного значения в dataSource (контейнер, модель). Есть ли лучший способ обращения к искаженным данным до того, как будет отправлено неопределенное значение combobox к сетке?
myGrid.bind("save", function (e) {
myCombo = $('#Worker').data("kendoComboBox");
rowDataItem = myGrid.dataItem(myGrid.tbody.find("tr.k-grid-edit-row"));
myPreviousWorker = e.model.Worker;//Worker previously
myNewWorker = myCombo.dataItem();//Worker about to be set by selected Combobox.
if (myNewWorker) {
alert("GOOD worker");
} else {
alert("BAD worker");
}
//Manipulate the combobox/container/model values
})