我在绑定到商店的视口中有一个 grid.Panel。加载网格(或存储)后,我想查看第一行(或任何行)中的值,如果为假,则在网格中隐藏一列。我尝试了许多不同的事件,但这是我的控制器中的一个示例:
Ext.define('HelperBatchForm.controller.BatchController', {
extend: 'Ext.app.Controller',
stores: [
'Batches'
],
models: [
'Batch'
],
views: [
'batch.BatchGrid',
'batch.BatchEdit'
],
init: function () {
this.control({
'batchgrid': {
itemdblclick: this.editBatch
,viewready: this.onGridLoad
}
});
},
onGridLoad: function(grid){
stop;
},
“停止”会引发错误并在我的 IE 浏览器中打开调试器。在浏览器本身上,我可以看到完全渲染的网格和行。在调试器中,我可以查看 grid.store.data.items[0] 并查看第一行。所以看起来一切都很好,我应该能够根据隐藏网格的数据在函数中设置一个条件。但这不起作用——这就是事情开始变得奇怪的地方。
如果我替换“停止;” 使用“调试器;”并重新加载,这次我们得到了 Visual Studio 调试器。但是现在,在 IE 屏幕中,我只能看到网格标题,而看不到任何数据。而 grid.store.data.items 是一个空数组。在我恢复的那一刻,我看到了完整的网格。
但这还不是全部。如果我的函数是: onGridLoad: function (grid) { alert('onGridLoad'); 调试器;},现在,加载了 Visual Studio 调试器后,我可以在 IE 中看到完整的网格和数据。而 grid.store.data.items[0] 给了我第一行。如果我用我的条件代码替换“调试器”,它就可以工作!换句话说,我的代码不起作用,但如果我在它之前抛出一个 alert() 就会突然开始工作。
总而言之,下面的代码将隐藏该列:
onGridLoad: function (grid) {
alert('onGridLoad');
if (grid.store.findExact('is_rcm', false) >= 0) {
grid.columns[6].hide();
}
},
但是如果警报被注释掉,它不会隐藏该列。
任何关于为什么会这样的想法或解释都将不胜感激。