4、ExtJs——Ext.window.Window

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 17:31   2376   0
第一个组件:Ext.window.Window。对于组件,也就是Ext最吸引开发者的地方。
- xtype:组件的别名
- Hierarchy 层次结构
- Inherited mixins 混入的类
- Requires 该组件需要使用的类
- configs:组件的配置信息
- properties:组件的属性
- methods:组件的方法

- events:组件的事件

Ext.onReady(function(){
 
 //Ext.create方法相当于创建一个实例对象
 Ext.create('Ext.window.Window',{
  title:'我的第一个组件',
  width:400,   //Number型,也可以是字符串类型 width:'90%'
  height:300,
  layout:'fit',
  renderTo:Ext.getBody()   //新创建的组件 渲染到什么位置
 }).show();                   //需要此方法,因为默认是隐藏的
 
});

window组件常用属性和方法讲解:
configs:
- constrain:布尔值,true为限制窗口只能在其容器内移动,默认值为false,允许窗口在任何位置移动。(另:constrianHeader属性)
- modal:布尔值,true为设置模态窗口。默认为false
- plain:布尔值,true为窗口设置透明背景。false则为正常背景,默认为false
- x、y 设置窗口左上角坐标位置。
- onEsc:复写onEsc函数,默认情况下按Esc键会关闭窗口。
- closeAction:string值,默认值为'destroy',可以设置'hide'关闭时隐藏窗口
- autoScroll:布尔值,是否需要滚动条,默认false

Ext.onReady(function(){
 
 //Ext.create方法相当于创建一个实例对象
 Ext.create('Ext.window.Window',{
  title:'我的第一个组件',
  width:400,   //Number型,也可以是字符串类型 width:'90%'
  height:300,
  layout:'fit',
  constrain:true,          //限制窗口不超出浏览器边界
  constrainHeader:true,    // 不允许该窗体标题超出浏览器边界
  modal:true,              //设置一个模态窗口
  plain:true,
  icon:'js/ExtJs/icons/used/browser_window.png',               //图片路径
  iconCls:'',             //css样式
  x:50,
  y:50,
  html:'<div style=width:200px;height=200px>我是一个div</div><div style=width:200px;height=200px>我是第二个div</div>',
  autoScroll:true,
  renderTo:Ext.getBody()   //新创建的组件 渲染到什么位置
  
 }).show();                   //需要此方法,因为默认是隐藏的
 
});

ExtWeb实战300例:
例1:点击按钮打开一个window,window重复创建的问题
重点分析:这个问题是初学者经常会犯错的地方,一般来说简单的代码不会产生此问题,但是如果以后代码复杂以后,这个问题如果发生调试起来会非常麻烦!!
Ext.onReady(function(){
 //ex001:点击一个按钮,打开一个新的窗体
 
 //JQuery code: var btn = $('#btn'); var dombtn = btn.get(0);
 var btn = Ext.get('btn');       //这个元素是经过Ext包装的一个Ext的Dom对象
 alert(btn.value);   //undefined
 alert(btn.dom.value);
 btn.on('click',function(){
  if(!Ext.getCmp('mywin')){
  Ext.create('Ext.window.Window',{
   id:'mywin',   //如果给组件加了一个id,那么这个组件就会被Ext所管理
   title:'新窗体',
   height:200,
   width:300,
   renderTo:Ext.getBody()
//   modal:true
  }).show();}
 });
});
第二种实现:

 var win = Ext.create('Ext.window.Window',{
   id:'mywin',   //如果给组件加了一个id,那么这个组件就会被Ext所管理
   title:'新窗体',
   height:200,
   width:300,
   renderTo:Ext.getBody(),
   closeAction:'hide'   //closeAction默认是destroy,销毁
  });
 Ext.get('btn').on('click',function(){
  win.show();
 });



例2: 在window中添加子组件,并讲解常用查找组件的方式:
重点分析:该实例主要针对于组件的查找进行详细的讲解,在以后的应用开发中,应该学会各种方式去查找所需要的组件,不要拘泥于某种特定形式,这样会给开发思路带来很多好处。
- ownerCt
- up/down方法
- Ext.getCmp方法

添加子组件:

Ext.onReady(function(){
//在组件中添加子组件,并进行一系列针对于组件的操作
 var win = new Ext.window.Window({
  title:'添加子组件',
  width:400,
  height:300,
  renderTo:Ext.getBody(),
  draggable:false,        //不允许拖拽
  resizable:false,         //不允许改变大小
  closable:false,            //不显示关闭按钮
  collapsible:true,            //允许折叠
  bodyStyle:'background:#ffc;padding:10px',   //设置样式
  html:'我是window的内容',
  //Ext items(array)  配置子组件的配置项
  items:[{
  //Ext的组件给我们提供了一个简单地写法  xtype属性去创建组件
  xtype:'panel',
  width:'50%',
  height:100,
  html:'我是面板'
  },
  //第二种方法,直接new一个对象
  new Ext.button.Button({
   text:'我是按钮new',
   handler:function(){
    alert('我被点击了');
    alert(this.text);
   }
  })
//   {        //第一种方法,使用xtype声明
//  xtype:'button',
//  text:'我是按钮',
//  handler:function(btn){
//   alert('我被点击了');
//   alert(btn.text);
//  }
//  
//  }
  
  ]
 }); 
 win.show();
});

操作子组件:

 //在组件中操作子组件
 var win = new Ext.Window({
  id:'mywin',
  title:'操作组件的形式',
  width:500,
  height:300,
  renderTo:Ext.getBody(),
  //表示在当前组件的top位置添加一个工具条,工具条中包含几个按钮,使用数组形式
  tbar:[{             //bbar(bottom)   lbar(leftbar)  rbar(rightbar  fbar(footbar))
   text:'按钮1',
   handler:function(btn){
    //组件都会有up和down这两个方法,表示向上或向下查找,需要参数是组件的xtype或者选择器
    alert(btn.up('window').title);
   }
  },{
   text:'按钮2',
   handler:function(btn){
    //最常用的方式
    alert(Ext.getCmp('mywin').title);
   }
  },{
   text:'按钮3',
   handler:function(btn){
    //以上一级组件的形式去查找OwnerCt
    alert((btn.ownerCt.ownerCt).title);
   }
  }]         
 });
 win.show();
例3: windowGroup对象 操作window组
重点分析:该实例主要目的针对于特殊需求进行具体的实现,利用windowGroup去操作多个窗体同步执行某些任务,这有点类似于javascript里的组合模式,原理就是上级负责执行一个动作但并不真正去执行,而是分别传递给所有的下级组件去具体执行。
- register
- hideAll
- each
Ext.onReady(function(){
//用windowGroup对象去操作多个window窗口(4.0后,叫做ZIndexManager)
 
 var wingroup = new Ext.WindowGroup();
 for(var i = 1; i<= 5;i++){
  var win = Ext.create('Ext.Window',{
   title:'第' + i + '个窗口',
   id:'win_' + i,
   width:300,
   height:300,
   renderTo:Ext.getBody()
  });
  win.show();
  wingroup.register(win);         //把窗体对象注册给ZIndexManager
   
 }
 var btn1 = Ext.create('Ext.button.Button',{
  text:'全部隐藏',
  renderTo:Ext.getBody(),
  handler:function(){
   wingroup.hideAll();        //隐藏所有被管理起来的window组件
  }
  
 });
 
 var btn2 = new Ext.button.Button({
  text:'全部显示',
  renderTo:Ext.getBody(),
  handler:function(){
   wingroup.each(function(cmp){
    cmp.show();
   });
  }
 });
 
  var btn3 = new Ext.button.Button({
  text:'把第三个窗口显示最前',
  renderTo:Ext.getBody(),
  handler:function(){
   wingroup.bringToFront('win_3');  //把当前组件显示到最前端
   
  }
 });
 
 var btn4 = new Ext.button.Button({
  text:'把第五个窗口显示在最后',
  renderTo:Ext.getBody(),
  handler:function(){
   wingroup.sendToBack('win_5');  //把当前组件显示到最后
   
  }
 });
});



分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP