简体   繁体   English

ext js 4 网格多选

[英]ext js 4 grid multiselect

I have grid我有网格

 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;
     }
 });

in my controller i have function that exec when i click on item in grid在我的控制器中,我有当我点击网格中的项目时执行的功能

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

Question is问题是

  1. when I click on item in grid first time I have messagebox with "wtf" second time on same item - don't have(this is good)当我第一次点击网格中的项目时,我第二次在同一项目上有带有“wtf”的消息框 - 没有(这很好)

  2. but when I do multiSelect: true each time when i click on same item I have message(this is not good:()但是当我执行 multiSelect: true 时,每次单击同一项目时我都会收到消息(这不好:()

How can I do first variant, but with multiSelect: true我怎样才能做第一个变体,但使用multiSelect: true

Use the 'itemclick' event instead of the 'selectionchange' event.使用 'itemclick' 事件而不是 'selectionchange' 事件。 Here's a standalone example:这是一个独立的示例:

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);
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM