富客户端程序设计实例 - 视图层(Ext JS) - 页面与窗口的打开控制
点击按钮打开一个窗口,包括Windows窗口和Panel窗体。每次点击按钮不能打开多个窗体。设计的原则是打开窗口时,保存这个要打开的组件的ID;当关闭这个窗口的时候,对应在数组中删除这个组件的ID。这个类是pageHelper.js。代码如下:
- var list = new Array();
- Ext.define("appUtils.pageHelper" , //类名定义包含文件夹
- {
- // 添加一个组件 ID 到 ArrayList 中
- addComponentID : function(id)
- {
- Ext.Array.push(list , id);
- } ,
- //判断组件如 window/tab panel 等是否已打开 参数:组件id
- isComponentOpen : function(id)
- {
- var isOpen = Ext.Array.contains(list, id );
- if(isOpen == true){
- return true;
- }
- else{
- return false;
- }
- },
- //移除这个组件Id
- removeComponentID : function(id)
- {
- Ext.Array.remove(list , id) ;
- } ,
- // 控制页面视图中间区域被打开的Tab、panel等组件的关闭与开启 ---控制的控件为Panel及其子类
- panelComponentController : function(compName )
- {
- //根据centerArea组件的ID来获取这个对象 ,然后调用add方法
- var centerArea = Ext.getCmp("centerTab");
- var openedComp = Ext.create(compName);
- //创建对象与获取对象不同;创建:对象没有加载和显示。获取:对象已经加载
- if(openedComp.isPanel == true) //方法只用于panel及其子类对象
- {
- if( this.isComponentOpen(openedComp.id) == false )
- {
- centerArea.add(openedComp); //在Viewpoint的中心加入一个新Tab页
- this.addComponentID(openedComp.id);
- }
- else {
- //数组中包含组件ID,代表组件已经打开
- console.log("The panel has opened");
- }
- }
- else{
- console.log("该方法只用于 panel对象及其子类对象");
- return ;
- }
- } ,
- //控制被打开的Windows组件 --控制条件为windows及其子类组件
- windowComponentController : function(compName)
- {
- var winComp = Ext.create(compName);
- if(winComp.isWindow == true)
- {
- if(this.isComponentOpen(winComp.id) == false)
- {
- winComp.show();
- this.addComponentID(winComp.id)
- }
- else{
- //数组中包含组件ID,代表组件已经打开
- console.log("The window has opened .")
- }
- }
- else{
- console.log("该方法只用于 window 对象及其子类对象");
- return ;
- }
- } ,
- // 控制页面视图中间区域被打开的Tab、panel等组件的关闭与开启 ---Container对象及其子类对象
- containerComponentController : function(compName )
- {
- var centerArea = Ext.getCmp("centerTab");
- var openedComp = Ext.create(compName);
- if(openedComp.isContainer == true) //方法只用于panel及其子类对象
- {
- if( this.isComponentOpen(openedComp.id) == false )
- {
- centerArea.add(openedComp); //在Viewpoint的中心加入一个新Tab页
- this.addComponentID(openedComp.id);
- }
- else {
- console.log("The panel has opened");
- }
- }
- else{
- console.log("该方法只用于 Container 对象及其子类对象");
- return ;
- }
- }
- }) ;
var pt = Ext.create("appUtils.pageHelper"); 作为全局变量控制。Ext JS中在定义一个类之前引入是作为全局变量来控制,代码如下:
- var pt = Ext.create("appUtils.pageHelper");
- Ext.define('Hongbo.view.Viewport',
- { 省略后续代码 ……
在对应的打开窗体脚本中添加事件监听代码:
- Ext.define('Hongbo.view.west.childViews.DaKa_Tabpanel',
- {
- extend:"Ext.tab.Panel",
- alias : 'widget.DaKaTabpanel',
- id:'DaKaTab',
- title: '异动申请 ' ,
- closable: true,
- closeAction:'destroy' ,
- listeners:
- {
- 'close':function()
- {
- pt.removeComponentID("DaKaTab");
- }
- }
- });
在westArea.js中调用某一个窗口的代码:
- {
- xtype:"button",
- text:"CURD",
- width:150,
- height:40,
- handler:function()
- {
- pt.containerComponentController('Hongbo.view.west.childViews.ChaKan_table')
- }
- }