【问题标题】:extjs grid grouping : selection scrambledextjs网格分组:选择加扰
【发布时间】:2012-09-11 12:49:27
【问题描述】:

我目前有一个带有分组功能的网格,可以从固定存储中获取数据:

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 线程来解决这个问题。但由于我是 sencha 的新手,我不知道如何覆盖它。我做过类似的事情:

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

【问题讨论】:

  • 您使用哪个版本的 ExtJS?我无法在 4.0.7 中重现问题。

标签: grid extjs4 extjs


【解决方案1】:

似乎没有解决我的问题的答案。

因此我使用数据视图解决了它

【讨论】:

    【解决方案2】:

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

    更新: 这就是 Extjs 的错误。有人为此提供了修复,不知道它是否有效,但尝试添加:

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

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

    【讨论】:

    • 我把它搬到了商店,没有改变任何东西。
    • 这就是我尝试过的,但我没有让它工作。不知道放在哪里。
    • 你在哪里试过?在Ext.define('EY.store.FakePendingDocs', {之前添加
    【解决方案3】:

    我在Sencha Forum回答了类似的问题

    我遇到了同样的问题,下面的方法成功了: 我在我的商店中添加了这个分拣机:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-01
      • 2011-10-03
      相关资源
      最近更新 更多