我正在学习 extjs 4.1,但在大多数组件上都找不到点击事件 - 我是瞎子还是无法对点击按钮以外的其他组件做出反应?
是什么原因?HTML 支持点击所有元素。
每个组件都可以在元素级别公开点击事件。一些组件像Ext.button.Button
在组件级别有一个点击事件。
这是在面板上添加点击事件的好方法:
new Ext.panel.Panel({
listeners: {
click: this.handlePanelClick,
element: 'el'
}
});
编辑以回复评论
元素字符串是作为组件属性的任何元素。
new Ext.panel.Panel({
listeners: {
click: function() {
alert('you clicked the body');
},
element: 'body'
}
});
Ext 文档有更详尽的解释http://docs.sencha.com/ext-js/4-1/#!/api/Ext.util.Observable-method-addListener
您可以通过访问几乎所有可见组件在渲染后包含的Ext.dom.Element对象来轻松添加任何 DOM 事件。
只需将侦听器添加到afterrender
将您想要的事件添加到 dom 对象的事件中。
Ext.create('Ext.panel.Panel', {
// other panel configs ...
listeners: {
'afterrender': function(panel) {
panel.el.on('click', function() {
alert('clicked');
});
}
}
});
我认为还有一种方法可以对扩展Ext.util.Observable的类的所有组件(所有可见组件)执行此操作。我以前没有做过,所以你必须玩弄它。
使用自引用托管侦听器(最干净的 imo):
Ext.create('Ext.panel.Panel', {
listeners: {
'afterrender': function(panel) {
this.mon(this.getEl(), 'click', this.onClick, this)
}
},
onClick: function() {
alert("mmm mon mon mon");
}
});
如果您只听点击事件,您也可以这样做
xtype: 'container',
listeners: {
el: {
click: function() {
alert('I clicked');
},
scope: this
}
}
如果您需要侦听 Ext.dom.Element 不触发的事件,您需要将其附加到“渲染”侦听器中,就像其他人建议的那样。