2015-12-28 35 views
0

我試圖從視圖控制器內啓動模態窗口。考慮下面的代碼(也位於https://fiddle.sencha.com/#fiddle/1335):ExtJS6啓動模態窗口的ViewController

Ext.application({ 
    name : 'Fiddle', 
    launch : function() { 
     Ext.define('Window1',{ 
      extend: 'Ext.window.Window', 
      controller: 'winctrl', 
      xtype: 'window1', 
      initComponent: function(){ 
       Ext.apply(this,{ 
        title:'Window 1', 
        width: 400, 
        height: 400, 
        layout: {type:'hbox',pack:'center',align:'middle'}, 
        items:[{ 
         xtype: 'button', 
         text: 'Click Me!', 
         handler: 'btnClickMeClick' 
        }] 
       }); 
       this.callParent(arguments); 
      } 
     }); 
     Ext.define('Window2',{ 
      extend: 'Ext.window.Window', 
      xtype: 'window2', 
      initComponent: function(){ 
       Ext.apply(this,{ 
        title: 'Window 2', 
        width: 200, 
        height: 200, 
        modal: true, 
        //renderTo: Ext.getBody(), 
        layout: {type:'hbox',pack:'center',align:'middle'}, 
        items:[{ 
         html: 'Modal Looks Odd', 
         listeners:{ 
          afterrender: 'htmlRender' 
         } 
        }] 
       }); 
       this.callParent(arguments); 
      } 
     }); 
     Ext.define('WinCtrl',{ 
      extend: 'Ext.app.ViewController', 
      alias:'controller.winctrl', 
      btnClickMeClick: function(){ 
       this.dialog = this.getView().add({xtype:'window2'}); 
       this.dialog.show(); 
      }, 
      htmlRender: function(){ 
       console.log(this.dialog); 
      } 
     }); 
     Ext.widget('window1').show(); 
    } 
}); 

我遇到的問題是,當車窗2推出的是模態才啓動它的觀點和我需要的窗口,是模式到整個文件。如果按原樣運行,htmlRender函數將正確記錄窗口2對象。我試圖在窗口2上設置renderTo: Ext.getBody();但是,渲染時無法訪問它的對象。在這種情況下,htmlRender會爲窗口2對象記錄一個「未定義」。

我需要一些幫助,允許窗口2呈現爲文檔的模態,同時允許我引用其對象。謝謝你的幫助。

回答

0

窗口不添加到該視圖中,將:

this.dialog = this.getView().add({xtype:'window2'}) 

有了:

this.dialog = Ext.widget('window2'); 

工作例如:https://fiddle.sencha.com/#fiddle/1338

+0

我也試過。問題是,它將範圍從視圖控制器中取出。如果你把html配置放回窗口並聽取「afterrender」,它就不會在viewcontroller中找到htmlRender方法。 – user1532602

+0

我能夠通過在窗口上設置renderConfig:Ext.getBody()來解決此問題,刪除了html項目上的偵聽器,甚至在窗口中添加了一個偵聽器:https://fiddle.sencha.com /#小提琴/ 133j – user1532602