我有一个剑道网格,其中有一列使用组合框,该组合框绑定到一个名为“Worker”(ID,Workername)的对象。这可以正常工作,除非用户将组合框文本设置为与任何下拉选项都不匹配的字符串(例如:'xxxx')。组合框将 Worker 的值设置为字符串 ('xxxx') 而不是 Worker 对象,此时 dataSource 在收到格式错误的数据时停止响应。
我已经让它在 dataSource 'change' 事件中工作,该事件在网格的 'save' 事件之后触发。有问题的 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 支持告诉我,我应该解决网格的“保存”事件中未定义的值,但在组合框设置行之前触发。我可以看到这些值,但我不确定可以在哪里设置这些值以防止将未定义的值发送到数据源(容器、模型) 在发送未定义的组合框值之前是否有更好的方法来解决格式错误的数据到电网?
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
})