2017-02-17 3 views
2

Я использую контекстное меню в своей сетке ExtJS. Все идет правильно. Моя проблема в том, что когда я использую правый клик, появляется меню. Опять же, когда я изменяю строку сетки, контекстное меню не исчезает.ContextMenu не исчезает из ExtJs Grid

Мой код

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. Щелкните правой кнопкой мыши на строке одного, вы получите предварительный просмотр в меню
  2. Теперь нажмите на второй строке. В идеале просмотр должен исчезнуть, но этого не происходит.

ответ

3

Это, кажется, ошибка в версии 5.1.0 (это версия, которую вы используете в своей скрипке). Он исправлен в версии 5.1.1. Если вы не можете обновить версию, попробуйте добавить contextMenu.hide() в обработчик rowclick. Если вы хотите, чтобы contextMenu исчез сразу, вам нужно будет отложить оставшуюся часть обработчика.

См. Обновленную скрипку here.

+0

Спасибо за этот ответ – David