访问tabpanel的第二个选项卡

时间:2016-02-25 22:02:07

标签: extjs extjs3

访问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时,上面的代码才能正常工作。任何帮助将不胜感激。

2 个答案:

答案 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);