3

「ワーカー」(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
})
4

1 に答える 1

2

Petur Subevはこの回答を提供することができました: jsbin

「バッチ」保存を使用するグリッドの例では、グリッドの「保存」イベントは、コンボボックス内の未定義の選択をチェックし、モデルの変更イベントに 1 回 (jquery .one()) バインドして、保存中に目的の値を設定します。コンボボックスの選択が未定義の場合のみ。

http://jsbin.com/edamuj/649/edit


//grid configuration setup
save:function(e){          
       if(!e.container.find('[data-role=combobox]').data().kendoComboBox.dataItem())
       {
         e.model.one('change',function(e){
             this.set('test',{CategoryName:"Bevarages",CategoryID: "001"}) 
         }) 

       }

       this.refresh();
    }

以下のバッチ保存のないグリッドの例 (インライン編集など) は、グリッドの保存時にのみトリガーする必要があり、モデル変更への追加のバインドは必要ありません。Petur の他のjsbin

save:function(e){
       if(!e.container.find('[data-role=combobox]').data().kendoComboBox.dataItem())
       {
           e.model.set('test',{CategoryName:"Bevarages",CategoryID: "001"})
       }

       this.refresh();
    }
于 2013-04-02T14:54:45.257 に答える