extjs网格分组:选择加扰

时间:2012-09-11 12:49:28

标签: grid extjs4 extjs

我目前有一个网格,其分组功能可以从固定商店获取数据:

Ext.define('YUK.store.FakePendingDocs', {
    extend: 'Ext.data.Store',
    id: 'FakePendingDocs',
    autoSync: false,
    proxy: {
        type: 'memory'
    },

   fields: [ { name: 'docId', mapping: 'did' }
            , { name: 'name', mapping: 'name'}//, mapping : 'name'}
            , { name: 'client',mapping: 'cid' }
            , { name: 'description', mapping: 'description' }
            , { name: 'uploadeddate', mapping: 'dl', type: 'date', dateFormat: 'MS' }
            , { name: 'folder', mapping: 'fo' }
            , { name: 'group', mapping: 'gr' }

           ],

   groupers: [{
       property: 'group',
       direction: 'ASC'
   }],. 

   data: [ ... ]



}
);

然后我在我的网格中做:

Ext.define('YUK.view.center.pendingdocuments.Panel', {
    extend: 'Ext.grid.Panel',
    alias: 'widget.documents',
    id: 'documents',
    title: 'My Documents',
    store: 'FakePendingDocs',

    hideHeaders: true,
    forceFit: true,

    groupField: 'group',

....

但是我的问题是我的选择在我的网格中被扰乱(我选择一个项目,然后我得到另一个项目)。我找到了这个http://www.sencha.com/forum/showthread.php?208453线程来解决这个问题。但由于我是新手,我不知道如何改写它。我做过类似的事情:

Ext.define('YUK.store.FakePendingDocs', {
    extend: 'Ext.data.Store',
    id: 'FakePendingDocs',
    autoSync: false,
    proxy: {
        type: 'memory'
    },

   fields: [ { name: 'docId', mapping: 'did' }
            , { name: 'name', mapping: 'name'}//, mapping : 'name'}
            , { name: 'client',mapping: 'cid' }
            , { name: 'description', mapping: 'description' }
            , { name: 'uploadeddate', mapping: 'dl', type: 'date', dateFormat: 'MS' }
            , { name: 'folder', mapping: 'fo' }
            , { name: 'group', mapping: 'gr' }

           ],

   groupers: [{
       property: 'group',
       direction: 'ASC'
   }],. 

   data: [ ... ],

   sort:function(){
     var me = this, groups, g;




     me.callOverridden(arguments);
     groups = me.getGroups();


     me.data.clear();


     Ext.Array.each(groups, function (group) {
        Ext.Array.each(group.children, function (child) {
           me.data.add(child.internalId, child);
        });
     });
     me.fireGroupChange();
  }

}
);

但这不起作用,也没有把它放在网格中。

有人可以帮我这个吗?

P.S:我对网格的分组功能如下:

var groupingFeature = Ext.create('Ext.grid.feature.Grouping', {
    groupHeaderTpl: '{name}'


});

Thread on Sencha Forums

3 个答案:

答案 0 :(得分:3)

我的问题似乎没有答案。

因此我使用数据视图

解决了这个问题

答案 1 :(得分:2)

我不确定,Panel没有像groupField这样的选项,但商店有。{所以也许你应该从面板移动groupField: 'group',

更新: 那就是Extjs的bug。有人为此提供了修复,但不知道它是否正常工作但尝试添加:

Ext.override(Ext.data.Store, {
  sort:function(){
     var me = this, groups, g;

     me.callOverridden(arguments);
     groups = me.getGroups();

     me.data.clear();

     Ext.Array.each(groups, function (group) {
        Ext.Array.each(group.children, function (child) {
           me.data.add(child.internalId, child);
        });
     });
     me.fireGroupChange();
  }
});

在您的商店或应用程序启动之前的某个地方或您认为它适合的地方

答案 2 :(得分:0)

我回答了Sencha Forum

中的类似问题

我遇到了同样的问题,以下是诀窍: 我在商店里添加了这台分拣机:

sorters: [{
    property: 'category',
    direction: 'ASC'
}]

注意'category'是我在商店中用作groupField分组的列。 需要使用groupField列进行排序,否则网格选择将无法正常工作。