渲染后如何在 Ext.selection.CheckboxModel 中设置选中的项目?

How set checked items in Ext.selection.CheckboxModel after render?

我在 Ext.grid.Panel 中使用 Ext.selection.CheckboxModel 并在数据绑定和组件重新渲染后检查了一些项目。没有错误但错误的组件部分如下:

    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); return -1 行和 thisObj.getStore().data 中项目的调试计数为 0。但在控制台中我看到 console.log(thisObj.getStore().data); return 预期结果: viewready 结果相同。

我是 extJs 的新手,不明白我在这个简单的功能上做错了什么?请帮忙。谢谢。

您需要在商店加载后执行此功能:(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);
                }
            });
        }
    },