0

過去 3 時間、グリッド内にメニューを作成しようとしました (img: Menu inside a gridを参照)。しかし、私の人生ではhandlers、メニュー内で動作させることはできません。

編集 (明確化): すべてのレコード行で、グリッド内のアクション アイコン用のスペースを増やしたいです。onClickしたがって、追加のスペースを作成するために、各グリッド行内にメニューを配置したいと考えています(画像を参照)。これにより、無制限のアクション アイコンをドロップダウン メニューに追加できます。

私はこのようなメニューを作成しました (これは正しくないと思いますが、他に方法がわかりません):

ux.RGridPanel = Ext.extend(Ext.grid.GridPanel, {
    newMenu: new Ext.menu.Menu({
        id: 'mainMenu',
        style: {
            overflow: 'visible'     // For the Combo popup
        },
        items: [
            {
                text: 'I like Ext',
                checked: true       // when checked has a boolean value, it is assumed to be a CheckItem
            },
            {
                iconCls: 'sitemap_16',
                text: 'Test 2',
                tooltip: '',
                handler: function(a,b){
                    console.log(this.ownerCt); //All this stuff is not working
                    console.log(a);
                    console.log( this.parent);
                    this.parent.showSelectDialog //This is what is causing me issues, this won't work.
                }
            },
            [...]
        ]
    });

内部でハンドラーを呼び出そうとしていますRGridPanel:

showSelectDialog: function(grid, rowIndex, colIndex) {}

内部でナイスメソッドを使用したいRGridPanelので、パラメーターを渡す必要はありません。これを修正するために誰かが私を正しい方向に向けることができますか?!

編集:::私はこれを次の内部で使用して、自分でいくらか遠くまで来ましたGridPanel:

loadMenu: function(){ 
    return new Ext.menu.Menu({
        scope:this,
        id: 'mainMenu',
        style: {
            overflow: 'visible'     // For the Combo popup
        },
        items: [
            {
                iconCls: 'sitemap_16',
                text: 'Test 2',
                handler:this.showSelectImportFileDialog, //this works, but it does not pass the required params

initComponent: function() {
    this.newMenu = this.loadMenu();

そしてcogアイコンで:

  handler: function (view, record, el, i, e) {
      view.newMenu.showAt(e.getXY());
  },

呼び出すことができるようになりましshowSelectDialogたが、デフォルトのパラメーター (は機能していません。メニュー内から(grid, rowIndex, colIndex)呼び出すためです。showSelectDialog

4

1 に答える 1

-1

メニューを表示すると、次のような情報を提供できます。

handler: function(grid, rowIndex, colIndex, item, e) {
    grid.newMenu.cfg = {
        grid: grid,
        rowIndex: rowIndex,
        colIndex: colIndex,
        whatever: null
    };
    grid.newMenu.showAt(e.getXY());
}

次に、メニューハンドラーでそれを使用します:

handler: function(){
    var menu = this.ownerCt;
    var cfg = menu.cfg;

    console.log(cfg);
}

作業サンプル: http://jsfiddle.net/8KJ36/2/

于 2013-11-18T12:18:58.313 に答える