Как динамически изменить набор сбора столбцов кендо TreeList? - PullRequest
0 голосов
/ 21 октября 2019

Попробуйте динамически изменить список столбцов с помощью запроса ...

Когда я создаю TreeList, я вызываю столбцы:

$("#treelist").kendoTreeList({
        columns: AnalyseCenterSKUService.getKPIColumnList($scope)

Если я возвращаю простой массив споля, это работает ..

Если я вызываю $http.get (внутри моей функции getKPIColumnList (..)), которая добавляет некоторые столбцы к существующему массиву столбцов, TreeList создается неправильно.

Любое предложение будет по достоинству оценено! :)

EDIT 22-10-2019 09: 00

Treelist init

$("#treelist").kendoTreeList({
        columns: AnalyseCenterSKUService.getKPIColumnList($scope), 
        scrollable: true,
        columnMenu : {
            columns : true
        },
        height: "100%", 
        dataBound: function (e) {
            ExpandAll();
        },
        dataSource: {
            schema: {
                model: {
                    id: "id",
                    parentId: "parentId",
                    fields: {
                        id: { type: "number" },
                        parentId: { type: "number", nullable: true },
                        fields: {
                            id: { type: "number" },
                            parentId: { type: "number", nullable: false }
                        }
                    }
                }
            },
            transport: {
                read: {

                    url: "/api/AnalyseCenter/GetWorkOrderTree/0",
                    dataType: "json"
                }
            }
        }

getKPIColumnList возвращает статический массив + некоторое нажатие сдинамические столбцы (из БД)

angular.module('AnalyseCenterDirectives')
.service ('AnalyseCenterSKUService', function ($http) {

        var toReturn = [ {field: "Name", title: "Hiérachie SKU", width: "30%" }, ..., ..., .... ];

Я пытаюсь в этой функции выдвинуть результат БД

    return $http.get("/api/AnalyseCenter/GetWorkOrderHistorianAdditonalColumns?equipmentName=" + equipmentName)
             .then(function (result) {
                 var data = result.data;
                 if (data && data !== 'undefined') {
                     var fromDB = data;


                     angular.forEach(fromDB, function (tag) {
                         var tagName = tag.replace(".","_");
                         toReturn.push({                                 
                              field: tagName, title: tag, width: '10%',
                              attributes: { style: "text-align:right;"}                                                         })
                        })

Хранимая процедура GetWorkOrderHistorianAdditonalColumns возвращает список строк (будущий столбец)

1 Ответ

0 голосов
/ 22 октября 2019

Это потому, что ajax является асинхронным , это означает, что ваш древовидный список инициализируется до запроса. Классический вопрос для новичков JavaScript. Я предлагаю вам некоторое время прочитать о ajax, например Как работает AJAX, например .

Вернемся к вашей проблеме. Вам нужно создать свой древовидный список в обратном вызове success (я не могу дать вам более полное решение, так как не знаю, что вы делаете внутри своей функции или какую платформу вы используете дляоткройте этот запрос ajax) с данными результата, которые, вероятно, являются вашими столбцами. Тогда это будет работать так, как будто вы инициализируете его массивами.

...