2012-12-19 6 views
0

У меня есть сеткаExt JS 4 сетки MultiSelect

Ext.define('a.view.a', { 
extend: 'Ext.grid.Panel', 
alias: 'widget.list', 
store: 'a.store.store', 
multiSelect: false, 
enableKeyEvents: true, 

initComponent: function() { 
    var me = this; 
    var user = TR.user; 
    this.addEvents('edit'); 

    this.columns = [ 
     {dataIndex: 'Id', width: 50, align: 'center', sortable: false } 
    ]; 

    this.actions = { 
     edit: Ext.create('Ext.Action', { 
      text: 'Изменить заявку', 
      icon: 'Content/Resources/images/editDoc.gif', 
      cls: 'selected-griditem-button', 
      handler: function() { this.fireEvent('edit', this.getRequest()); }, 
      scope: this 
     }) 
    }; 

    var contextMenu = Ext.create('Ext.menu.Menu', { 
     items: [ 
      this.actions.edit 
     ] 
    }); 

    this.on({ 
     itemcontextmenu: function (view, rec, node, index, e) { 
      this.getSelectionModel().select(index); 
      e.stopEvent(); 
      contextMenu.showAt(e.getXY()); 
      return false; 
     } 
     , beforeitemdblclick: function (gr, rowIndex, e) { 
      this.fireEvent('edit', this.getRequest()); 
     } 
    }); 

    this.viewConfig = { 
     listeners: { 
      itemkeydown: function (v, r, item, index, e) { 
       if (e.getKey() == e.DELETE) { 
        e.stopEvent(); 
        this.fireEvent('del', this.getRequest()); 
       } 
      }, 
      scope: this 
     } 
    }; 

    this.callParent(arguments); 
} 
, getRequest: function() { 
    var sm = this.getSelectionModel(); 
    var rs = sm.getSelection(); 
    if (rs.length) { 
     return rs[0]; 
    } 
    return null; 
} 

});

в мой контроллер у меня есть функция, которая EXEC при нажатии на элемент в сетке

, onSelectionChange: function (sm, rs) { 
     alert('wtf'); 
    } 

вопрос является 1.При я нажимаю на элемент в сетке первый раз у меня есть MessageBox с «WTF» второй раз тот же товар - нет (это хорошо)

2.But когда я делаю MULTISELECT: истинно каждый раз, когда я нажимаю на тот же товар у меня есть сообщение (это не хорошо :()

как я могу сделать первый вариант, но с "mul tiSelect: true "

ответ

0

Используйте событие« itemclick »вместо события« changechange ». Вот отдельный пример:

Ext.onReady(function() { 

    Ext.define('Model', { 
     extend: 'Ext.data.Model', 
     fields: [ 
      {name: 'field1'}, 
     ], 
     idProperty: 'field1' 
    }); 

    Ext.define('Grid', { 
     extend: 'Ext.grid.Panel', 
     multiSelect: true, 

     initComponent: function() { 
      this.store = Ext.create('Ext.data.ArrayStore', { 
       model: 'Model', 
       data: [ 
        ['value1'], 
        ['value2'], 
        ['value3'] 
       ] 
      }); 

      this.columns = [ 
       {dataIndex: 'field1', flex: 1} 
      ]; 
      this.callParent(arguments); 
     } 
    }); 

    var grid = Ext.create('Grid', { 
     renderTo: Ext.getBody() 
    }); 

    grid.on('selectionchange', function (grid, selected, options) { 
     console.log(selected); 
    }, this); 

    grid.on('itemclick', function (grid, record, item, index, e, options) { 
     console.log('itemclick: ' + index); 
    }, this); 
}); 
Смежные вопросы