2016-01-17 33 views
0

我有三个独立的标签面板,每个都是我的数据库中的一张表。我想要做的是点击一个按钮,同时将所有三个选项卡的内容保存在数据库中。我设法得到当前活动选项卡的PK“援助”,但是当我尝试访问第二个非活动选项卡B with window.frames [“frm_B”]并提醒结果时,我变得未定义。任何帮助将非常感激。用一个按钮保存多个标签面板

tabPanel = Ext.create('Ext.tab.Panel', { 
     region: 'center', 
     activeTab: 0, 
     autoScroll: true, 
     tbar: [{ 
      xtype: 'button', 
      text: 'Save', 
      handler:function(){saveForm("frm_A", save);} 
     }], 
     items: [ 
       { 
        id:"panel_A", 
        html: "<iframe src= '"+A_url +"' width='100%' height='100%' id='frm_A' name='frm_A' frameborder=0 />", 
       },{ 
        id:"panel_B", 
        html: "<iframe src='"+B_url+"' width='100%' height='100%' id='frm_B' name='frm_B' frameborder=0 />", 
       },{ 
        id:"panel_C", 
        html: "<iframe src= '"+C_url+"' width='100%' height='100%' id='frm_C' name='frm_C' frameborder=0 />", 
       }] 
     }); 


    viewport = new Ext.Viewport({ 
     layout:'border', 
     items:[tabPanel] 
    }); 

    function save(record){ 

     var Aid = record.getKey(); 
     var doc = window.frames["frm_B"]; 
     alert(doc); 
     try { 
      doc.RECORD.getField("A_ID").setRealValue(Aid); 
      doc.RECORD.update(closeAndRefresh, viewExtError); 

     } 
     catch(e){ 
      showError(e); 
     } 

    } 
+0

[访问选项卡中的iframe可能的复制面板extjs4.2](http://stackoverflow.com/questions/34831078/accessing-an-iframe-inside-a-tab-panel-extjs4-2) –

回答

2

我猜你的问题是,你的<iframe name='frm_B'>不会被渲染(添加到DOM)当您尝试与window.frames["frm_B"]得到它。

当您使用Ext.create('Ext.tab.Panel', {});创建标签面板时,您只需创建JS对象,而不是立即将其所有items: []添加到DOM。

容器的子组件首次呈现容器时由该容器的布局 管理器呈现。

例如,当您第一次打开该选项卡时,将tabpanel选项卡添加到DOM。

Fiddle to illustrate it

解决你的问题取决于你的代码实际上,但是作为变通方法,您可以使用标签面板的子面板的.render()方法...

+0

谢谢你说明问题。你介意在哪里使用.render()?请 – mikeb

+0

那么,正如我所说,这取决于您的代码。你使用'iframe'而不是常见的ExtJS组件,所以我猜你的逻辑不常见。我添加了两个按钮来说明'.render()'方法的用法,以及如何通过布局管理器手动渲染它,但它远非最终解决方案。 –

+1

标签面板上的'deferredRender'配置。 –