2017-02-17 4 views
2

ExtJSグリッドでcontextmenuを使用しています。それは正しかった。私の問題は、右クリックしてメニューが表示されているときです。グリッド行を変更すると、コンテキストメニューが消えません。なぜこれが起こっているExtJsグリッドからContextMenuが消えない

私のコード

Ext.application({ 
    name: 'Fiddle', 
    launch: function() { 
     var grid = Ext.create('Ext.grid.Panel', { 
      renderTo: Ext.getBody(), 
      width: 400, 
      height: 500, 
      title: 'itemcontextmenu', 
      store: { 
       fields: ['name', 'email', 'phone'], 
       data: [ 
        { 
         'name': 'Lisa', 
         "email": "[email protected]", 
         "phone": "555-111-1224" 
        }, 
        { 
         'name': 'Bart', 
         "email": "[email protected]", 
         "phone": "555-222-1234" 
        }, 
        { 
         'name': 'Homer', 
         "email": "[email protected]", 
         "phone": "555-222-1244" 
        }, 
        { 
         'name': 'Marge', 
         "email": "[email protected]", 
         "phone": "" 
        } 
       ] 
      }, 
      columns: [ 
       { 
        text: 'Name', 
        dataIndex: 'name', 
        flex: 1 
       } 
      ], 
      listeners:[ 
       { 
        rowclick: function(a , record , element , rowIndex , e , eOpts) { 
         debugger; 
         if (rowIndex == 1) 
         { 
          alert("Hello"); 
         } 
         else if (rowIndex == 2) 
         { 
          alert("Maddy"); 
         } 
        } 
       } 
      ] 
     }); 

     var contextMenu = Ext.create('Ext.menu.Menu', { 
      width: 200, 
      items: [ 
       { 
        text: 'Preview', 
        handler: function() { 
         var record = grid ? grid.getSelection()[0] : null; 
         if (!record) 
         { 
          return; 
         } 

         alert(record.get('name')); 
        } 
       } 
      ] 
     }); 

     grid.on("itemcontextmenu", function(grid, record, item, index, e) { 
      e.stopEvent(); 
      contextMenu.showAt(e.getXY()); 
     }); 
    } 
}); 

は誰が、私に説明していただけますか?私の作業フィドル再現するhere

ステップ:

  1. は、右の行1をクリックして、あなたは、行2をクリックして今すぐメニュー
  2. でプレビューを取得します。理想的にはプレビューは消えるべきですが、それは起こっていません。

答えて

3

これはバージョン5.1.0(あなたのフィドルで使用しているバージョン)のバグです。バージョン5.1.1で修正されました。バージョンを更新できない場合は、rowclickハンドラに​​を追加してみてください。 contextMenuをすぐに消したい場合は、残りのハンドラを延期する必要があります。

更新されたフィドルhereをご覧ください。

+0

この回答ありがとうございます – David

関連する問題