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イベントを非常に簡単に追加できます。

必要なイベントをdomオブジェクトに追加するリスナーをafterrenderイベントに追加するだけです。

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が起動しないイベントをリッスンする必要がある場合は、他の人が提案しているように、「render」リスナーにアタッチする必要があります。

于 2013-10-22T19:32:08.960 に答える