访问选项卡面板的第二个选项卡

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

发生这种情况是因为选项卡上的组件将首先显示。默认情况下,将在此选项卡上呈现网格后加载存储。因此,在打开选项卡之前,您没有呈现标记(opsGrid.getView())并且没有在商店加载数据。如果您将打开第二个选项卡并手动 运行 您的代码,它应该可以正常工作。

尝试将选项卡面板的 deferredRender 设置为 false,或将第二个选项卡的 forceLayout 设置为 true。它将强制渲染和加载所有选项卡 (deferredRender:false) 或仅渲染和加载选项卡,您将在此处设置 forceLayout。

我和 Selmaril 走的路一样。您的视图无法访问。如果需要,您可以在 getView 之前切换标签页。

 yourTabPanel.setActiveTab("availableagents");
 yourTabPanel.doLayout();

你的 TabPanel 是 xtype: 'tabpanel',为它设置一个 ID,你将能够: Ext.getCmp("yourTabPanel").setActiveTab("availableagents");