2016-11-19 28 views
1

在ExtJS的,如何创建视图控制器的窗口,以及如何使窗口的面板类似像这样的孩子:如何指定Ext JS的6窗口视图控制器

Ext.define('App.view.Main', { 
    items: [ 
     { xtype: 'textfield' }, 
     { xtype: 'window' } 
    ] 
}); 

的原因是我想启用相同的视图控制器来处理面板和窗口操作。但小组似乎并不接受窗口作为其子。

一个解决这是在控制器初始化:

//... 
init: function(view) { 
    this.myWindow = new Ext.window.Window(); 
} 

但是做这种方式将有窗口的视图控制器指出,全球应用程序控制器,这是不必要的。所以要解决这个问题,我可以在窗口中添加一堆监听器,但这不是首选。

反正我能做到这一点没有那些丑陋的解决方法?

+1

你可以尝试是否可以绑定一个视图控制器,以两种不同的观点 - 你的主要观点和窗户。除了那个我不确定的解决方法是否会起作用外,没有,没有。一个窗口是一个浮动组件,所以它通过定义保持在通常的组件层次结构之外。另一种可能性是使用一个[Controller](http://docs.sencha.com/extjs/6.2.0/classic/Ext.app.Controller.html),它对你的应用程序是全局的。 – Alexander

回答

2

为窗口创建一个视图控制器我会在这里建议一些东西。您可以创建窗口并附加与该窗口关联的所有组件。此示例代码将看起来像。

Ext.define("App.view.NewWin.NewWint", { 
    extend: "Ext.window.Window", 
    alias: 'widget.newWindow', 
    layout: 'fit', 
    scrollable: true, 
    layout: 'fit', 
    modal: true, 
    requires: [ 
     'App.view.NewWin.NewWintController' 
    ], 
    controller: 'newWindowController', 
    initComponent: function() { 
     var me = this, 
     // Code for attributes if in case any required 
     me.tbar = [ 
      // Code for TBar 
     ]; 
     me.items = [{ 
      // Code for WindowItem 
     }]; 
     me.buttons = ['->', { // some code for tbar 
      text: Save, 
      name: "Save", 
      hidden: me.readOnly, 
      disabled: true 
     }, { 
      text: Cancle, 
      name: "cancel" 
     }]; 
     me.callParent(arguments); 
    } 
}) 

由于我们在指定窗口定义的控制器newWindowController那么我们可以分开使用的控制器。示例代码将遵循这一

Ext.define('App.view.NewWin.NewWintController', { 
    extend: 'Ext.app.ViewController', 
    alias: 'controller.newWindowController', 

    init: function() { 
     var me = this; 
     me.control({ 
     // You can write the control for your component which is in window. 
     }); 
    }, 


    /* 
    * The code below will work on click of save. 
    */ 
    onSaveBtns: function(btn) { 
     var me = this, 
     // You code for save 
    }, 
    onClose: function(btn) { 
     var window = btn.up("window"); 
     window.close(); 
    } 
}); 

现在,第二部分是如何让一个窗口面板的孩子,AFTE有点研究,我发现这个>Panel as item你可以试试这个概念。我创造了一个小提琴,你可以在Fiddle附近玩。

注意在你的情况,而不是建立内部面板窗口中,你可以直接使用xtype : 'newWindow'

+0

我试图运行你的小提琴,窗口不在面板内呈现。这是我一直处理的问题,窗口被忽略,所以我无法直接将窗口的侦听器附加到窗口所有者容器。 – bigopon

+0

雅,在小提琴是窗口旁边面板。我要求检查代码。任何你想要在面板中附加窗口的方法。你能否提供一些关于你的要求的细节。难以理解的窗口作为面板的一部分。你可以请给我一个灯 – UDID

+0

这是事件处理程序绑定到控制器的方式的extjs事情。假设有一个面板,稍后会弹出一个包含表单的窗口。理想情况下,该弹出窗口的所有交互逻辑都应该属于面板。有一个窗口作为面板的孩子将确保封装。 – bigopon

0

但面板似乎并不接受窗口作为其子。

窗口是一个浮动面板,有一个窗口作为面板的孩子没有意义,为什么不直接使用面板或容器?如果需要,可以通过编程方式打开窗口。请参阅文档window

我会建议你有一个ViewController每个视图。如果你有多个控制器共同的方法,你可以用这些方法的超类,然后从扩展其他控制器的一个:

Ext.define('My.SuperController', { 
    init : function() { 
     this.getView().on('event', this.myHandler); 
    } 
}); 
Ext.define('My.PanelController', { 
    extend : 'My.SuperController' 
}); 
Ext.define('My.WindowController', { 
    extend : 'My.SuperController' 
}); 
相关问题