访问tabpanel的第二个标签页的网格行时,我得到了未定义的值。
我创建了一个带有以下代码的tabpanel:
xtype: 'tabpanel',
border: false,
deferredRender: true,
region: 'center',
activeTab: 0,
items:[{
id: 'availableoperators',
itemId: 'ops-operators-grid',
xtype: 'chat.dashboard.opsmall',
title: 'Operators',
region: 'center'
}, {
id: 'availableagents',
itemId: 'ops-agents-grid',
xtype: 'chat.dashboard.opsmgrid',
title: 'Agents',
region: 'center'
}]
这里我试图访问第二个面板的行:
var opsGrid = Ext.getCmp('availableagents');
var records = opsGrid.store.getRange(0, opsGrid.store.getTotalCount());
for(var i = 0; i < records.length; i++) {
var row = opsGrid.getView().getRow(i);
}
只有使用第一个标签的id时,上面的代码才能正常工作。任何帮助将不胜感激。
答案 0 :(得分:1)
这是因为首先显示选项卡上的组件。默认情况下,将在此选项卡上呈现网格后加载存储。所以你没有渲染标记(opsGrid.getView())并且没有在商店加载数据,直到你打开标签。如果您打开第二个选项卡并手动运行代码,它应该可以正常工作。
尝试为tabpanel设置deferredRender为false,或为第二个标签设置forceLayout为true。它将强制渲染并加载所有选项卡(deferredRender:false)或仅选项卡,在那里您将设置forceLayout。
答案 1 :(得分:0)
我和Selmaril一样。您的视图无法访问。如果需要,可以在getView之前切换选项卡。
yourTabPanel.setActiveTab("availableagents");
yourTabPanel.doLayout();
如果yourTabPanel是xtype: 'tabpanel'
,请将其设置为ID,您将可以执行以下操作:
Ext.getCmp(&#34; yourTabPanel&#34)。setActiveTab(&#34; availableagents&#34);