var element = Ext.get('domid'); var component = Ext.getCmp('domid')
各添加一个click事件
element.on('click',function(){}); component.on('click',function(){});
extjs源码中显示这两种添加事件方式是不同的。
给element上添加事件会最终把事件绑定到dom元素上(最终是调用addEventListener or attachEvent)
但是component添加事件只是记录了事件和回调函数的关系,然后fireEvent之后依次调用,并没有涉及到给dom元素添加事件。
但是费解的是当你给component添加click时间的时候,却是可以触发的。
不解。。。
以下是 component 添加事件的行为(使用Observable的
addListener)
addListener : function(eventName, fn, scope, o){ var me = this, e, oe, isF, ce; if (ISOBJECT(eventName)) { o = eventName; for (e in o){ oe = o[e]; if (!me.filterOptRe.test(e)) { me.addListener(e, oe.fn || oe, oe.scope || o.scope, oe.fn ? oe : o); } } } else { eventName = eventName.toLowerCase(); ce = me.events[eventName] || TRUE; if (Ext.isBoolean(ce)) { me.events[eventName] = ce = new EXTUTIL.Event(me, eventName); } ce.addListener(fn, scope, ISOBJECT(o) ? o : {}); } }
这是 element添加事件的代码(使用EventManager的addListener,最终会添加click事件到dom上)
addListener : function(eventName, fn, scope, options){ Ext.EventManager.on(this.dom, eventName, fn, scope || this, options); return this; }