Extjs как добавить новые узлы в выбранный узел - PullRequest
0 голосов
/ 13 мая 2019

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

function(item, record, index) {
        var selectedId = record.data.idelement;
        var newStore = Ext.create('mycomponent.mystore', {
            autoDestroy: true,
            idparent: selectedId
        });
        newStore.proxy.extraParams = {idparent: selectedId};
        newStore.removeAll(true);
        newStore.load();
}

Я могу сказать, что функция load выбирает нужные данные из базы данных на вкладке сети браузера. Ничего не произошло в представлении, дерево остается прежним. Это мой магазин:

Ext.define('mycomponent.mystore', {
    extend: 'Ext.data.TreeStore',
    alias: 'store.datatree',
    storeId: 'datatree',
    model: Ext.define('TreeNode', {
        extend: 'Ext.data.Model',
        fields: [{
            name: 'text',
            convert: function(v, r) {
                return r.data.text;
            }
        }]
    }),
    restful: true,
    autoLoad: false,
    // autoDestroy: true,
    root: {
        text: 'Loading...',
        id: 'NULL',
        expanded: true
    },
    listeners: {
        'load': function(store, records, successful, operation, eOpts) {
            var children = [];
            for (var i = 0, l = records.length; i < l; i++) {
                var x = records[i].data;
                var child = {
                    idelement: x.idelement,
                    name: x.name,
                    descript: x.descript,
                    active: x.activeo,
                    idparent: x.idparent,
                    text: x.name,
                    leaf: x.isleaf,
                    children: []
                };
                children.push(child);
            }

            if (!store.idpadre) {
                store.loadData(children, false);
            } else {
                var tree = Ext.getCmp('mytree');
                var oldStore = tree.store;
                var idparent = store.idparent;

                var node = oldStore.getRootNode().findChild('idelement', idparent, true);

                if (node && !node.leaf) {
                    node.expand();
                    node.appendChild(
                        {
                            idelement: x.idelement,
                            name: x.name,
                            descript: x.descript,
                            active: x.activeo,
                            idparent: x.idparent,
                            text: x.name,
                            leaf: x.isleaf,
                            children: []
                        }
                    );
                }
            }
        }
    },

    proxy: {
        type: 'ajax',
        headers: {
           'Accept': '*/*',
           'Cache-Control': 'no-cache',
           'Content-Type': 'application/json',
           'Authorization': localStorage.token
        },
        extraParams: {
           'filter[active]': true,
           'filter[idparent][null]': 0
        },

        reader: {
            type: 'json',
            rootProperty: 'data',
            successProperty: 'success'
        },

        api: {
           read: 'myurl',
           create: 'myurl',
           update: 'myurl',
           destroy: 'myurl'
        },

        autoSave: true
    },
    constructor: function (config) {
        config = Ext.apply({
            rootProperty: Ext.clone(this.rootData)
        }, config);

        this.callParent([config]);
    }
});

Также это дает мне эту ошибку:

Uncaught TypeError: Cannot read property 'isVisible' of null
    at constructor.onChildNodesAvailable (ext-all-debug.js:109350)
    at Object.callback (ext-all-debug.js:8705)
    at constructor.onChildNodesAvailable (ext-all-debug.js:110968)
    at Object.callback (ext-all-debug.js:8705)
    at constructor.onProxyLoad (ext-all-debug.js:111930)
    at constructor.triggerCallbacks (ext-all-debug.js:80621)
    at constructor.setCompleted (ext-all-debug.js:80589)
    at constructor.setSuccessful (ext-all-debug.js:80602)
    at constructor.process (ext-all-debug.js:80501)
    at constructor.processResponse (ext-all-debug.js:89534)

То, что я пытаюсь сделать в хранилище * Событие 1011 * - это добавить один статический узел как дочерний узел выбранного узла только для тестирования и однажды сделать это, чтобы поместить туда реальные данные из Restapi, но я ' Я не могу этого сделать. По моей логике это должно работать, но это не так, что я делаю не так? Что мне здесь не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...