Почему функции источника данных Kendo не вызываются? - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь привязать возвращенные данные из источника данных к сетке, но проблема в том, что не одна из моих функций источника данных называется ...

transactionHistoryGridDS: new kendo.data.DataSource({
    error: function () {
        alert("erroe")
    },
    complete: function () {
        alert("completed")
    },
    success: function () {
        alert("success");
    },
    transport: {
        read: {
            dataType: "json",
            type: 'POST',
            url: args.TransactionHistoryUrl,
            data: {
                id: function () {return vm.transactionHistoryParams.id },
                originBranch: function () {return vm.transactionHistoryParams.originBranch },
                take: function () {return vm.transactionHistoryParams.take },
                skip: function () {return vm.transactionHistoryParams.skip }
            }
        },
        schema: {
            parse: function (data) {
                alert("hey...")
                return data;
            },
            data: "data",
            total: "total",
        },
        pageSize: 20,
        serverPaging: false
    }
}),

Когда я вызываю чтение источника данных через код ниже

 vm.transactionHistoryGridDS.read();

Ajax запрос вызывается и данные успешно возвращаются с сервера, но не из функций, включающих success и error и complete и parse, и, следовательно, данные не привязываются к сетке.

1 Ответ

1 голос
/ 28 марта 2020

Я вижу некоторые ошибки, которые необходимо исправить, прежде чем ваша сетка заработает.

Прежде всего, schema, pageSize, serverPaging на неправильном уровне отступа, он должен быть включен тот же уровень, что и transport не внутри него.

transport: {...},
schema: {...},
serverPaging: ...,
pageSize: ...

Каждая сетка должна иметь свойство dataSource, чтение будет вызвано автоматически и данные будут заполнены, вам не нужно устанавливать данные в сетку или вызывать read() функция:

$('#grid').kendoGrid({
    dataSource: {
        transport: {
            read: {...}
        }
    }
});

В вашем случае я предполагаю, что vm является сеткой, поэтому вам нужно установить dataSource:transactionHistoryGridDS, проверить примеры ссылок ниже

Если вам нужно отправить данные с запросом, используйте parameterMap :

$('#grid').kendoGrid({
    resizable: true,
    filterable: true,
    sortable: true,
    pageable: {
        pageSize: 10,
        refresh: true,
        pageSizes: [5, 10, 20, 100, 500, 1000]
    },
    dataSource: {
        pageSize: 10,
        serverPaging: true,
        serverFiltering: true,
        transport: {
            read: {
                url: 'url',
                type: 'POST',
                dataType: 'JSON',
                contentType: 'application/json'
            },
            update: {...},
            destroy: {...},
            parameterMap(data, type) {
                switch (type) {
                    case 'read':
                        let request = {};
                        request.page = data.page - 1;
                        request.page_size = data.pageSize;
                        request.sort = data.sort;
                        request.filter = data.filter;

                        return JSON.stringify(request);
                    case 'destroy':
                        return kendo.stringify(data);
                    default:
                        break;
                }
            }
        }
    }
});

Существует два способа получения данных из запроса kendo dataSource, первый - с помощью функции complete, которая вызывается по завершении запроса и ответа. Второй - обещание на каждый запрос источника данных.

Первый пример: завершенный вызов

Второй пример: вызов обещания

...