私はExt.define()(Ext v4)でGridPanelを拡張しています。
グリッド行をダブルクリックしたときに行データを取得する必要があります。この時点では、イベントリスナーを動作させることもできません。
Ext.define('Application.usersGrid', {
extend: 'Ext.grid.GridPanel',
alias: 'widget.usersgrid',
viewConfig: {
listeners: {
dblclick: function(dataview, index, item, e) {
alert('dblclick');
}
}
},
...
ここで何が問題になっていますか?
誰かが答えを必要とする場合-これは正しい方法です:
Ext.define('Application.usersGrid', {
extend: 'Ext.grid.Panel',
alias: 'widget.usersgrid',
viewConfig: {
listeners: {
itemdblclick: function(dataview, record, item, index, e) {
alert('itemdblclick');
}
}
},
...
http://dev.sencha.com/new/ext-js/4-0/api/Ext.grid.GridView#event-itemdblclick
リスナーをviewconfigに配置する必要はありません。これが私の作業構成です:
listeners : {
itemdblclick: function(dv, record, item, index, e) {
alert('working');
}
},
もう1つは、extendプロパティでExt.grid.GridPanel
を使用したようです。しかし、ドキュメントではExt.grid.Panel
です。しかし、グリッドパネルを使用しても、すべてが正常に動作しているようです。
Ext JS 4の用語を使用することをお勧めします。これは、他の4.xバージョンでアプリケーションが破損する可能性があるためです。
ここで、新しいMVCアーキテクチャーを使用している場合、これらのアクションをビューではなくコントローラーに移動する必要があります。詳細については、MVCアーキテクチャガイドを参照してください。
ExtJS 4のMVCアプローチには、そのようなハンドラーを定義するための別のスマートな方法もあります。いくつかのサンプルコード:
Ext.define('App.controller.Documents', {
extend: 'Ext.app.Controller',
stores: ['Documents'],
models: ['Document'],
views: [
'document.List',
'document.Edit',
'document.Preview'
],
init: function() {
this.control({
/*
* a cool way to select stuff in ExtJS 4
*/
'documentlist': {
itemdblclick: this.editDocument
},
/*
* simple access to components
*/
'documentedit button[action=save]': {
click: this.updateDocument
},
});
},
editDocument: function(grid, record) {
var view = Ext.widget('documentedit');
view.down('form').loadRecord(record);
},
updateDocument: function(button) {
var win = button.up('window'), // new selection API
form = win.down('form'), // in ExtJS 4
record = form.getRecord(),
values = form.getValues();
record.set(values);
win.close();
}
});
listeners: {
select: 'xxxx',
itemdblclick: function (dv, record, item, index, e) {
var myBtn = Ext.getCmp('btnEdit');
myBtn.onClick();
}
},