Требуется загрузка Kndo TreeView, но не попадает на сервер

#kendo-ui #kendo-treeview

#kendo-пользовательский интерфейс #kendo-treeview

Вопрос:

для моего kendo treeview я установил load on demand в значение true, но он не попадает на сервер для загрузки дочерних элементов, потому что свойство ‘children’ установлено для модели источника данных, даже если оно пустое.

 homogeneous = new kendo.data.HierarchicalDataSource({
         transport: {
            read: {
                type: 'POST',
                contentType: "application/json; charset=utf-8",
                url: obj.DataSourcesURL,
                dataType: "json"
            },
            parameterMap: function (options) {
                if (!options.Id) {
                    options.Id = null;

                }
                if (options.filter) {
                    options.Search = options.filter.filters[0].name;
                }
                else {
                    options.Search = '';

                }
                return JSON.stringify(options);
            }
        },
        schema: {
            data: "d",
            errors: function (response) {
                console.log(response);
                console.log("errors");
            },
            model: {
                hasChildren: "hasChild",
                children:'items',
                id: "Id"
            }
        }
    });
  

И код TreeView является

 $treeView.kendoTreeView({
        dataTextField: 'Description',
        checkboxes: {
            checkChildren: true
        },
        dataSource: homogeneous,
        loadOnDemand: loadOnDemand,
        check: function () {
            var checkedNodes = [];
            var treeView = $treeView.data("kendoTreeView");

            getCheckedNodes(treeView.dataSource.view(), checkedNodes);
            setMessage(checkedNodes.length);
        },
        dataBound: function (e) {
            if (e !== undefined)
                resetCheckedNodes(e.sender.dataItems());
        },
        messages: {
            loading: "Laden..."
        },
        expand: function (e) {
            var dataItem = this.dataItem(e.node);

        }
    });
  

Ответ №1:

Попробуйте установить hasChildren подобное в вашей схеме:

 schema: {
        data: "d",
        errors: function (response) {
            console.log(response);
            console.log("errors");
        },
        model: {
            hasChildren: function(e) {
                    return e.items amp;amp; e.items.length;
                },
            children:'items',
            id: "Id"
        }
    }
  

А также из вашего вопроса я не уверен, получаете ли вы вообще какие-либо данные, или это только Children данные, которые не возвращаются. Возможно, вы могли бы также показать, как выглядит ваша структура данных.

Комментарии:

1. я получаю данные для корневого уровня, но не дочерние элементы, если я удаляю свойство children из модели, все работает нормально, но затем, если я удаляю его и пытаюсь загрузить все данные вместе (например, как результат поиска), дочерние элементы не отображаются

2. Можете ли вы взять часть вашего ответа на данные, просто чтобы увидеть структуру или создать фиктивную структуру данных, как выглядит ваш ответ. Потому что, если вы скажете children: ‘элементы’, это означает, что ваши дочерние элементы будут такими: ‘[{ ParentID: 123, Name: something, Items: {Id: 1234,Name: ChildName}}]’ и здесь ‘элементы’ представляют ваших дочерних элементов.

3. {«__type»:»EDTS.ViewModel. Типы данных. TreeStructureViewModel»,»ParentId»:null,»hasChild»:true,»items»:null,»expanded»:false,»Id»:260,»Description»:» Описание 1″}, обратите внимание, что элементы существуют в возвращаемом объекте, но со значением null, поскольку он не загружен,