1

我正在学习 extjs 4.1,但在大多数组件上都找不到点击事件 - 我是瞎子还是无法对点击按钮以外的其他组件做出反应?

是什么原因?HTML 支持点击所有元素。

4

4 回答 4

3

每个组件都可以在元素级别公开点击事件。一些组件像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

于 2012-08-17T00:59:00.693 回答
2

您可以通过访问几乎所有可见组件在渲染后包含的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的类的所有组件(所有可见组件)执行此操作。我以前没有做过,所以你必须玩弄它。

于 2012-08-16T15:38:13.070 回答
0

使用自引用托管侦听器(最干净的 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");
    }
});
于 2013-06-26T11:24:14.917 回答
0

如果您只听点击事件,您也可以这样做

    xtype: 'container',
    listeners: {
         el: {
             click: function() {
                  alert('I clicked');
              },
              scope: this
             }
     }

如果您需要侦听 Ext.dom.Element 不触发的事件,您需要将其附加到“渲染”侦听器中,就像其他人建议的那样。

于 2013-10-22T19:32:08.960 回答