Kendo Grid - Read() не работает

Я работаю с сеткой кендо с подсеткой деталей. У меня, к сожалению, проблемы с обновлением. У нас есть собственный редактор всплывающих окон для каждого элемента (не пользовательская версия кендо, а совершенно другое всплывающее окно, поскольку у нас были другие требования, которым мы должны были соответствовать).

Кнопка сохранения во всплывающем окне после завершения вызова 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

                    });

Спасибо за любую помощь. Я буду работать над этим, чтобы попытаться закончить его.


person David Crook    schedule 31.01.2014    source источник


Ответы (2)


Эта строка:

outterGridDataSource.data = dataForGrid.Data.Data;

наверное должно быть

outterGridDataSource.data(dataForGrid.Data.Data);

(в вашем вопросе отсутствует много кода, поэтому в основном это догадки)

person Lars Höppner    schedule 31.01.2014

Проблема была на самом деле:

outterGrid.dataSource.transport.read необходимо перезаписать. Плагин, который мы создавали, предполагал, что у вас никогда не будет подсетки, и жестко запрограммировал имя переменной для данных в функцию чтения. Перезапись этой функции на:

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

Это работает и должно выполняться до вызова outterGrid.dataSource.read();

person David Crook    schedule 05.02.2014