现在的位置: 首页 > 综合 > 正文

Extjs4.0的事件机制

2014年03月13日 ⁄ 综合 ⁄ 共 4564字 ⁄ 字号 评论关闭

 

Extjs的事件机制

1.    事件的三种绑定方式

HTML/DHTML

DOM

EXTJS

事件绑定机制的总结地址:

http://www.uspcat.com/forum.php?mod=viewthread&tid=203&extra=page%3D1

 

第一种 在HTML中的原始的js脚本

         <script type="text/javascript">

       function hello(){

           alert("第一种事件绑定机制");

       }

</script>

<input type="button" id="btn1" value="第一种事件绑定机制" onclick="hello()"/><br/>

 

第二种:在DOM下的事件机制

<input type="button" id="btn2" value="第二种事件绑定机制"/><br/>

(function(){

    Ext.onReady(function(){

        //DOM事件的两种机制

       if(Ext.isIE){

           //适合在IE下运行的机制

    document.getElementById("btn2").attachEvent("onclick",function(){

              alert("第二种");

           });

       }else{

           //适合于火狐浏览器下运行的

document.getElementById("btn2").addEventListener("click",function(){

              alert("第二种");

           });

       }

    });

})();

 

注:在IE浏览器下运行的是attachEvent,在火狐浏览器下运行的是addEventListener,DOM不能跨浏览器运行

 

第三种  在extjs下的事件机制

(function(){

    Ext.onReady(function(){

       //extjs的事件机制,是跨浏览器的

       Ext.get("btn3").on("click",function(){

           alert("333");

       });

    });

})();

Extjs的事件机制在哪个浏览器下都可以使用

 

 

 

2.     
Ext.util.Observable
  事件的基类

它是为所有支持事件机制的extjs组件提供事件的支持

如果我们自己创建新的组件要是有事件的支持,那么我们就继承它

 

事件的分类:

           标准事件[键盘按钮按下,鼠标的单击事件,滑过滑动]

           业务事件[当面板收起的时候触发的事件,当组件被销毁的时候触发,当每一个对象的属性值不为空的时候触发]

 

一个自定义的例子:

           没有用到事件处理的场景

           母亲问孩子饿不饿—--->

                             ---à孩子

                                       饿了 ---à给一瓶牛奶

                                       不饿---à不给

           用了事件的场景

                    母亲给孩子一瓶牛奶----à

                                                         孩子拿到牛奶感觉饿了就喝

                                                         感觉不饿就不喝

           角色功能分析

                    孩子:应该有自己能拿到牛奶判断自己饿不饿的方法,当母亲给他牛奶的时候调用这个方法

                    那么孩子就要有一个业务事件时刻监听着母亲什么时候给奶喝

                    母亲:调用孩子拿牛奶的方法,并且传入一瓶牛奶

 

 

例子为:

(function(){

    Ext.onReady(function(){

    //举例讲解时间的基类     Ext.util.Obervable

      

       //孩子类

       Ext.define("children",{

           extend:'Ext.util.Observable',

           //构造函数

           constructor:function(){

              this.state = "hungry",//目前所属的状态

              this.setMilk = function(milk){

                  //触发这个事件的动作

                  this.fireEvent('hungry',milk);

              },

              this.addEvents({"hungry":true});//添加事件

              this.addListener("hungry",function(milk){

                  if(this.state == 'hungry'){

                     this.drink(milk);

                  }else{

                     alert("我不渴");

                  }

              });

              this.drink = function(milk){

                  alert("我喝了一瓶牛奶"+milk);

              }

           },

       });

       var children = Ext.create("children",{});

       //母亲调用孩子的接受牛奶的方法

       children.setMilk("爽歪歪");

    });

    /**

     * 事件的步骤:

     * (1)为对象添加一个事件  this.addEvents

     * (2)事件的监听方式注册这个事件  this.addListener

     * (3)触发了这个事件的动作 this.fireEvent

     */

})();

 

3.     addManageListener  受管制的事件监听

它是由调用的组件创建管理的,当组件执行了销毁的命令的时候所有的被管制的组件都被销毁

(function(){

    Ext.onReady(function(){

        //来介绍事件中addManageListener的作用,是用来管理其他组件的

       //我们用到一个工具类来举例

       var tbar = Ext.create("Ext.toolbar.Toolbar",{

           renderTo : Ext.getBody(),//意思是让组件依附于哪里

           width:500,

           //存放组件的数组

           items:[

              {xtype: 'button',id:'create', text : 'create' },

              {xtype:'button',id:'delete', text:'delete'},

              {xtype:'button',text:'destory',handler:function(){

                     var c = Ext.getCmp("delete");//

                     if(c){

                         c.destroy();

                     }

                  }

              }

           ]

       });

       var deleteB = Ext.getCmp("delete");

       deleteB.addManagedListener(Ext.getCmp("create"),'click',function(){

           alert("添加操作");

       });

       //deleteB.addManagedListener的意思是( 管理的是谁,管理的事件是什么事件,当执行管理的事件时的操作),就相当于是

       //Ext.getcmp("create").on("click",function(){});

       //Ext.getCmp("delete");方法获取的是id

    });

})();

 

4.relayEvents事件的分发和传播(控制实现事件在不同空间或对象内传播)

        var children = Ext.create("children",{});

       //父类没有声明过任何监听事件

       Ext.define("father",{

           extend:'Ext.util.Observable',

           constructor:function(config){

              this.listeners = config.listeners;

              this.superchlass.constructor.call(this,config);

           }

       });

      

       var father = Ext.create("father",{});

       father.relayEvents(children,['hungry']);//事件的分发和传播

       father.on('hungry',function(){

           alert("送医院")

    });

5.事件对象  Ext.EventObject

    Ext.onReady(function(){

    //eventObject传统的事件

    var b = Ext.get("btn4").on("click",function(e){

       alert(e.getPageX());

    });

});

6.事件管理器 Ext.EventManager

    它可以更方便的为页面元素绑定事件处理函数

       Ext.onReady(function(){

    //通过事件管理器注册监听

    Ext.EventManager.addListener("btn5",'click',function(){

       alert("adfsf");

    })

});

 

抱歉!评论已关闭.