「ワーカー」(ID、ワーカー名) というオブジェクトにバインドされたコンボボックスを使用する列を持つ剣道グリッドがあります。これは、ユーザーがドロップダウン オプションと一致しない文字列 (例: 'xxxx') にコンボ ボックスのテキストを設定する場合を除き、正常に機能します。コンボボックス セットは、Worker オブジェクトの代わりに文字列 ('xxxx') に Worker の値を設定し、その時点で dataSource が不正な形式のデータを受信したときに応答を停止します。
これは、グリッドの「保存」イベントの後に発生する 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 のサポートから、グリッドの「保存」イベントで未定義の値に対処する必要があると言われましたが、コンボボックスによって行が設定される前に発生します。値を確認できますが、未定義の値が dataSource (コンテナ、モデル) に送信されるのを防ぐために値を設定できる場所がわかりません 未定義のコンボボックスの値が送信される前に、不正な形式のデータに対処するより良い方法はありますかグリッドに?
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
})