Extjs не работает store.getRootNode (). FindChild ('idelement', record.data.idelement, true) после первой успешной загрузки - PullRequest
0 голосов
/ 16 мая 2019

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

Это то, что я делаю:

itemdblclick: function (item, record, eOpts) {
    var store = Ext.getStore('mystore');
    var newStore = Ext.create('mycomponent.mystore', {
        autoDestroy: true
    });
    var node = store.getRootNode().findChild('idelement', record.data.idelement, true);
    var parentid = record.data.idelement;

    var that = this;

    newStore.proxy.extraParams = {
        sort: 'clave',
        'filter[active]': true,
        'filter[idparent]' = parentid
    };

    newStore.load({
        callback: function(items) {
            for (var i = 0, l = items.length; i < l; i++) {
                var item = items[i].data;
                var child = {
                    idparent = parentid,
                    ...
                };
                node.appendChild(child, true);
            }
            node.expand();
        }
    });
}

Первый вызов возвращает данные правильно и вставляет их в узел.С этого момента каждый двойной щелчок по продукту и ошибке говорит мне следующее:

Uncaught TypeError: Невозможно прочитать свойство 'appendChild' со значением null

Есть ли способ решить эту проблему?Как я могу заставить это работать?

1 Ответ

1 голос
/ 16 мая 2019

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

itemdblclick: function (item, record, eOpts) {
    var store = Ext.getStore('mystore');
    var newStore = Ext.create('mycomponent.mystore', {
        autoDestroy: true
    });
    var parentid = record.data.idelement;

    var that = this;

    newStore.proxy.extraParams = {
        sort: 'clave',
        'filter[active]': true,
        'filter[idparent]' = parentid
    };

    newStore.load({
        callback: function(items) {
            var node = store.getRootNode().findChild('idelement', parentid, true);
            if (node) {
                for (var i = 0, l = items.length; i < l; i++) {
                    var item = items[i].data;
                    var child = {
                        idparent = parentid,
                        ...
                    };
                    node.appendChild(child, true);
                }
                node.expand();
            }
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...