渲染后如何在 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);
}
});
}
},
我在 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);
}
});
}
},