【问题标题】:Kendo grid combobox sends undefined data to DataSourceKendo 网格组合框将未定义的数据发送到 DataSource
【发布时间】:2013-03-28 20:43:39
【问题描述】:

我有一个剑道网格,其中有一列使用组合框,该组合框绑定到一个名为“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
})

【问题讨论】:

    标签: javascript kendo-ui kendo-grid


    【解决方案1】:

    Petur Subev 能够提供这个答案:jsbin

    在具有“批量”保存的网格示例中,网格的“保存”事件检查组合框中未定义的选择,然后绑定一次 (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();
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-05
      • 2011-10-22
      • 2015-01-25
      • 2017-12-08
      相关资源
      最近更新 更多