Выберите уже выбранный Treenode (повторно выберите) с помощью Ext.js 4.2. - PullRequest
0 голосов
/ 05 июля 2018

У меня есть панель дерева (Ext.tree.Panel), которая на select загружает другую панель. Теперь, когда я изменяю некоторые данные в другой панели, я хочу изменить узел в дереве, а затем повторно выбрать его (в зависимости от данных, хранящихся на узле, некоторые вычисления запускаются при выборе). Теперь вопрос в том, как мне повторно выбрать уже выбранный узел, чтобы обработчик выбора получил соответствующие аргументы? Использование Treepanel.fireEvent("select") не дает выбора обработчику. Я также пытался запустить событие на узле или использовать Treepanel.selectPath(correctPath), но это не сработало, поскольку узел уже выбран ...

Простой пример для проверки:

var test = function () {
Ext.create("Ext.window.Window", {
    items: [{
        xtype: "treepanel",
        width: 200,
        height: 150,
        store: Ext.create("Ext.data.TreeStore", {
            root: {
                expanded: true,
                children: [
                    { text: "test0", leaf: true, dataForSomeOtherOperation: { x: 1, y: 1 } },
                    { text: "test1", leaf: true, dataForSomeOtherOperation: { x: 1, y: 1 } },
                    { text: "test2", leaf: true, dataForSomeOtherOperation: { x: 1, y: 1 } },
                ]
            }
        }),
        listeners: {
            select: function (model, selected) {
                this.up("window").down("button").setDisabled(false);
                alert(selected.data.dataForSomeOtherOperation.x);
            }
        }
    }],
    tbar: {
        items: [{
            text: "Some Event Changing Selected Node",
            disabled:true,
            listeners: {
                click: function () {
                    var treePanel = this.up("window").down("treepanel"),
                        selected = treePanel.getSelectionModel().getSelection()[0];
                    selected.data.dataForSomeOtherOperation.x = 666;
                    treePanel.fireEvent("select"); <--***
                }
            }
        }]
    }
}).show();
}

Вопрос: чем заменить строку на ***, чтобы получить предупреждение () при нажатии кнопки?

(я использую Ext.js 4.2) (выберите узел, чтобы включить кнопку в примере)

1 Ответ

0 голосов
/ 06 июля 2018

Просто отмените выбор All и снова выберите узел, как показано ниже:

Ext.application({
    name: 'Fiddle',

    launch: function () {


            Ext.create("Ext.window.Window", {
                items: [{
                    xtype: "treepanel",
                    width: 200,
                    height: 150,
                    store: Ext.create("Ext.data.TreeStore", {
                        root: {
                            expanded: true,
                            children: [{
                                text: "test0",
                                leaf: true,
                                dataForSomeOtherOperation: {
                                    x: 1,
                                    y: 1
                                }
                            }, {
                                text: "test1",
                                leaf: true,
                                dataForSomeOtherOperation: {
                                    x: 1,
                                    y: 1
                                }
                            }, {
                                text: "test2",
                                leaf: true,
                                dataForSomeOtherOperation: {
                                    x: 1,
                                    y: 1
                                }
                            }, ]
                        }
                    }),
                    listeners: {
                        select: function (model, selected, record,r,t) {
                            this.up("window").down("button").setDisabled(false);
                            alert(selected.raw.dataForSomeOtherOperation.x);
                        }
                    }
                }],
                tbar: {
                    items: [{
                        text: "Some Event Changing Selected Node",
                        disabled: true,
                        listeners: {
                            click: function () {
                                var treePanel = this.up("window").down("treepanel");
                                var selected = treePanel.getSelectionModel().getSelection()[0];

                                selected.raw.dataForSomeOtherOperation.x = 666;

                                //Fire the event by deselecting and reselecting
                                treePanel.getSelectionModel().deselectAll();
                                treePanel.getSelectionModel().select(selected)

                            }
                        }
                    }]
                }
            }).show();

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