Kendo Grid - Read()不起作用

时间:2014-01-31 15:41:33

标签: jquery kendo-ui kendo-grid kendo-datasource

我正在使用带有详细子网格的Kendo Grid。遗憾的是,我很难将其更新。我们为每个项目都有自己的自定义弹出编辑器(不是kendo的自定义版本,但完全不同的弹出窗口,因为我们有其他要求,我们必须满足。)

弹出窗口完成其ajax调用后的保存按钮使用以下回调来刷新网格。这似乎不起作用。我已经测试了详细信息部分中项目的更新。网格完全崩溃,我没有错误,但是当重新扩展网格时,有问题的项目没有改变。然而,完全关闭网格并重新打开网格确实有效。

        function refreshData() {
        if (!settings.dataUrl)
            return;

        $.ajax({
            type: "POST",
            url: settings.dataUrl,
            data: new Object(),
            dataType: "json",
            contentType: "application/json"
        }).done(function (data, textStatus, jqXhr) {
            // Perform mapping function on data
            if (settings.mapperFunction) {
                data = settings.mapperFunction(data, settings.pageSettings);
            }
            var dataForGrid = data;
            if (settings.transformGridDataCallback)
                dataForGrid = settings.transformGridDataCallback(JSON.parse(JSON.stringify(dataForGrid)));

            settings.unfilteredTotal = dataForGrid.Data.Data.length;
            outterGridDataSource.data = dataForGrid.Data.Data;
            outterGridDataSource.read();


        });

    };

以下是子网格的DetailInit定义的示例代码。

detailInit: function (e) {


                    var innerColumns = [
                       ...column definitions
                    ];

                    var $detail = $("<div />").addClass("grid_detail class");
                    $detail.append($("<div />").addClass("grid inner_grid"));

                    //#region Problems Details
                    $detail.find(".inner_grid").kendoGrid({
                        scrollable: false,
                        editable: false,
                        dataSource: {
                            data: e.data.subItems,
                            transport: { //need this for Kendo Grid to handle updates properly
                                read: function (o) {
                                    o.success(e.data.subItems);
                                },
                                create: function (o) {

                                },
                                update: function (o) {

                                },
                                destroy: function (o) {
                                    o.success();

                                }
                            },
                            schema: {
                                model: { 
                                    id: "Id", 
                                    fields: {
                                        display: { defaultValue: settings.pageSettings.stringvalue1 }
                                    }
                                }
                            }
                        },
                        columns: innerColumns

                    });

感谢您的帮助。我将努力尝试完成它。

2 个答案:

答案 0 :(得分:1)

这一行:

outterGridDataSource.data = dataForGrid.Data.Data;

应该是

outterGridDataSource.data(dataForGrid.Data.Data);

(你的问题中缺少很多代码,所以这主要是猜测)

答案 1 :(得分:0)

问题实际上是:

需要覆盖

outterGrid.dataSource.transport.read。我们构建的插件假设您永远不会有子网格,并将数据的变量名称硬编码到读取函数中。用以下代码覆盖此功能:

outterGrid.dataSource.transport.read = function(o){
o.success(dataForGrid.Data.Data);
}

这有效,必须在调用outterGrid.dataSource.read();

之前执行