ExtJS 6.5+では、コンポーネントにクリックイベントを追加して、ビューコントローラでそのコンポーネントにアクセスできるようにします。ExtJS 6.x ViewControllerのカスタムクリックイベントをコンポーネントに追加
以下の例は機能しません。また、サブ要素に直接リスナーを追加しようとしました。
例テンプレート:priyadarshi回答に基づいて
Ext.define('TestController', {
extend: 'Ext.app.ViewController',
alias: 'controller.test-controller',
control: {
'[reference=someComponent]': {
click: 'someComponentClick'
}
},
someComponentClick: function() {
console.log('it worked!')
}
})
Ext.define('TestContainer', {
extend: 'Ext.Container',
xtype: 'test-container',
controller: 'test-controller',
items: [
{
xtype: 'component',
reference: 'someComponent'
html: 'CLICK HERE TO TEST'
}
]
})
更新
、要素に以下は、コントローラ内の関数を呼び出します。しかし、私は、単にイベントをクリックすることを好むだろうコントローラを正常にクリックイベントを聞いて。とにかく、コントローラーからdomにイベントリスナーをアタッチするか、少なくともコントローラーで(コントローラー上の関数を明示的に呼び出すことなく)それを拾うことができるように、要素からのイベントを発生させますか?
Ext.define('TestController', {
extend: 'Ext.app.ViewController',
alias: 'controller.test-controller',
control: {
'[reference=someComponent]': {
click: 'someComponentClick'
}
},
someComponentClick: function() {
console.log('it worked!')
},
someFuncOnController: function() {
console.log('someFuncOnController') // << This runs
}
})
Ext.define('TestContainer', {
extend: 'Ext.Container',
xtype: 'test-container',
controller: 'test-controller',
items: [
{
xtype: 'component',
reference: 'someComponent'
html: 'CLICK HERE TO TEST',
listeners: [
element: 'element',
click: 'someFuncOnController'
]
}
]
})
コントローラ上のコントロール()ステートメントを使用しないでください。 –
私はコントロールを使用すべきではないのですか?これは通常、コンポーネント上でリスナーをどのように行うのですか? –
すべてのイベントを処理する必要があるイベントバス上にイベントを設定する必要があるためです。コンポーネント上で直接イベントを使用する場合は、コントローラー内の単純なO(1)ルックアップです。 –