Как установить проверенные элементы в Ext.selection.CheckboxModel после рендера? - PullRequest
0 голосов
/ 09 января 2020

Я использую Ext.selection.CheckboxModel в Ext.grid.Panel и проверял некоторые элементы после привязки данных и рендеринга компонента. Ниже приведена часть компонента, которая работает без ошибок, но неправильно:

    listeners: {
        afterRender: function (thisObj, eOpts) {
            var window = Ext.ComponentQuery.query('#' + 'requestOperator_kbkAccess-window')[0];
            if (window) {
                var row = window.accessGrid.getSelectionModel().getSelection()[0],
                    ppp = row.get('Ppp'),
                    codes = ppp.map(a => a.Code);

                Ext.defer(function () {
                    var selections = [];
                    codes.forEach(function (item, index) {
                        let i = thisObj.getStore().find('Code', item);
                        if (i !== -1) {
                            selections.push(store.getAt(i))
                        }
                    });

                    console.log(thisObj.getStore().data);

                    thisObj.getSelectionModel().select(selections);
                }, 100);
            }
        }
    }

Этот код получает строку кодов, таких как 022,077,009, от родительского компонента и пытается установить как проверенные эти коды в Ext.selection.CheckboxModel. Неправильная работа этого кода заключается в том, что строка let i = thisObj.getStore().find('Code', item); возвращает -1, а при отладке количество элементов в thisObj.getStore().data равно 0. Но в консоли я вижу, что console.log(thisObj.getStore().data); возвращает ожидаемый результат: enter image description here На viewready результат тот же.

Я новичок в ext Js и не понимаю, что я делаю неправильно в этой простой функциональности? Пожалуйста помоги. Спасибо.

1 Ответ

2 голосов
/ 09 января 2020

Вам нужно сделать эту функцию после загрузки магазина: (https://docs.sencha.com/extjs/7.0.0/classic/Ext.data.Store.html#event -load )

Вы можете сделать это следующим образом:

    listeners: {
        afterRender: function (thisObj, eOpts) {
            thisObj.getStore().on('load', function () {
                var window = Ext.ComponentQuery.query('#' + 'requestOperator_kbkAccess-window')[0];
                if (window) {
                    var row = window.accessGrid.getSelectionModel().getSelection()[0],
                        ppp = row.get('Ppp'),
                        codes = ppp.map(a => a.Code);

                    Ext.defer(function () {
                        var selections = [];
                        codes.forEach(function (item, index) {
                            let i = thisObj.getStore().find('Code', item);
                            if (i !== -1) {
                                selections.push(store.getAt(i))
                            }
                        });

                        console.log(thisObj.getStore().data);

                        thisObj.getSelectionModel().select(selections);
                    }, 100);
                }
            });
        }
    },
...