Grid 具有下拉模板的剑道UI网格在保存到服务器后未更新值

Grid 具有下拉模板的剑道UI网格在保存到服务器后未更新值,grid,kendo-ui,Grid,Kendo Ui,我们使用的是基于服务器的简单网格。网格读取和更新远程数据源的数据。它有两个使用下拉编辑器的列。除了保存后,当编辑器关闭时,更改的值不会显示在已编辑的行中之外,所有操作似乎都正常工作。它仍然显示旧的值。当我们尝试使用sync事件刷新网格时,它会更改行的顺序,但会在刷新时更新值 更新完成后,似乎没有执行模板函数。如何编辑网格/代码以确保更改的值反映在网格中 网格定义代码: $("#servicetype-grid").kendoGrid({ pageable: true, toolb

我们使用的是基于服务器的简单网格。网格读取和更新远程数据源的数据。它有两个使用下拉编辑器的列。除了保存后,当编辑器关闭时,更改的值不会显示在已编辑的行中之外,所有操作似乎都正常工作。它仍然显示旧的值。当我们尝试使用sync事件刷新网格时,它会更改行的顺序,但会在刷新时更新值

更新完成后,似乎没有执行模板函数。如何编辑网格/代码以确保更改的值反映在网格中

网格定义代码:

$("#servicetype-grid").kendoGrid({
    pageable: true,
    toolbar: [{name: "create", text: ""}, { template: kendo.template($("#servicetype-search-template").html())}],
    columns: [
        {
            field: "serviceName", title: "Service Name" 
        },
        {
            field: "billCalculationTypeId", 
            editor: calculationTypeDropDownEditor, 
            template: function(dataItem) {
                return kendo.htmlEncode(dataItem.billCalculationTypeName);
            },
            title: "Bill Calculation Type"
        },
        {
            field: "payCalculationTypeId", 
            editor: calculationTypeDropDownEditor, 
            template: function(dataItem) {
                return kendo.htmlEncode(dataItem.payCalculationTypeName);
            },                            
            title: "Pay Calculation Type"
        },
        {
            command: [
                { name: "edit", text: { edit: "", cancel: "", update: "" }},
                { name: "destroy", text:""}
            ],
            title: "Actions"
        }
    ],
    dataSource: dataSource,
    sortable: {
        mode: "single",
        allowUnsort: false
    },
    dataBound: function(e) {
        setToolTip(); 
    },
    edit: function(e) {
        $('.k-grid-update').kendoTooltip({content: "Update"});
        $('.k-grid-cancel').kendoTooltip({content: "Cancel"});
    },
    cancel: function(e) {
        setToolTip();
    },
    editable: {
        mode: "inline",
        confirmation: "Are you sure that you want to delete this record?"
    }
});
下拉功能定义为:

function calculationTypeDropDownEditor(container, options) {
    $('<input required data-text-field="name" data-value-field="id" data-bind="value:' + options.field + '"/>')
    .appendTo(container)
    .kendoDropDownList({
        autoBind: false,
        dataSource: {
            transport: {
                read: {
                    dataType: "jsonp",
                    url: baseURL + "rips/services/calculationType/lookupList"
                }
            }
        }
    });
}
函数计算类型下拉编辑器(容器,选项){
$('')
.appendTo(容器)
.kendoDropDownList({
自动绑定:错误,
数据源:{
运输:{
阅读:{
数据类型:“jsonp”,
url:baseURL+“rips/services/calculationType/lookupList”
}
}
}
});
}

在谷歌上搜索并浏览剑道网站上的不同示例后,我终于能够解决这个问题。以下是我对问题和解决方案的理解:

当我们使用下拉框或组合框作为自定义编辑器时,通常会有一个不同的数据源,其中包含一个带有id和要显示的值的列表选项。我将模板定义为我正在查找的字段的“#=field.property”。在我的例子中,它是计算型的。以下是我的模型:

                    model: {
                    id: "serviceId",
                    fields: {
                        serviceName: { field:"serviceName", type: "string", validation: { required: { message: "Service Name is required"}} },
                        billCalculationType: { field: "billCalculationType", validation: { required: true}},
                        payCalculationType: { field: "payCalculationType", validation: { required: true} }
                    }
在上面,billCalculationType和payCalculationType应该是下拉列表值,显示计算类型名称,但存储相应计算类型的id。因此,在我的网格定义中,我添加了以下内容:

                          { field: "billCalculationType", 
                        editor: calculationTypeDropDownEditor, 
                        template:"#=billCalculationType.name#",
                        title: "Bill Calculation Type" },
其中,计算下拉编辑器是从外部数据源构建下拉列表的函数。所以,它工作得很好。但是,要使模板定义以(field.property)格式工作,服务器必须将该值作为该字段的类而不是简单的文本返回。因此,在我的服务器服务中,我以以下格式返回:

{"billCalculationType":{"id":"4028828542b66b3a0142b66b3b780001","name":"Hourly","requiredDetails":false},"payCalculationType":{"id":"4028828542b66b3a0142b66b3b960002","name":"Kilometers","requiredDetails":false},"serviceId":"4028828542b66b3a0142b66b3c16000a","serviceName":"XYZ"} 
请注意,billCalculationType和payCalculationType作为对象返回,其名称和id作为属性。这允许模板正常工作


希望这有帮助

我发现缺少的一件事是您没有定义模式。看一看这个例子,这个例子是用于弹出式编辑的,但是逻辑应该适用于您的案例。在定义网格时,我发现了一个使用模板定义的解决方案。但是,在内联添加记录时仍然存在问题。服务器正在正确返回数据,但它没有反映在新添加的行中。谢谢@sohail,你节省了我的时间