2016-01-17 4 views
0

У меня есть три отдельные вкладки с каждой таблицей в моей базе данных. То, что я пытаюсь сделать, заключается в том, что одним нажатием кнопки сохраняется содержимое всех трех вкладок в базе данных одновременно. Мне удалось получить PK «Aid» текущей активной вкладки, однако, когда я пытаюсь получить доступ ко второй неактивной вкладке B с помощью 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' на вкладке. –