Ext JS 4:将记录分成多个组

时间:2012-08-21 12:55:33

标签: extjs4 filtering grouping store gridpanel

是否可以将单个记录分组到多个组中?假设我有以下代码:

Ext.onReady(function() {
  var store = Ext.create('Ext.data.Store', {
    fields: ['name', 'profession'],
    groupField: 'profession',
    data: [
      {name: 'jack johnson', profession: 'surfer'},
      {name: 'dan aykroyd', profession: 'ghostbuster'},
      {name: 'dwayne johnson', profession: 'actor'},
      {name: 'chino moreno', profession: 'musician'}
    ]
  });
  var grid = Ext.create('Ext.grid.Panel', {
    store: store,
    columns: [{
      text: 'Name',
      dataIndex: 'name',
      flex: 1
    }, {
      text: 'Profession',
      dataIndex: 'profession',
      flex: 2
    }],
    features: [{ftype: 'grouping'}],
    height: 400,
    width: 400,
    renderTo: Ext.getBody()
  });
});

不要过多地阅读这些专业,因为这是一个玩具的例子,但是我想说我想把Dan Aykroyd分成两组......“ghostbuster”和“musician”。但是,我没有在网上看到任何这样的例子,所以我想知道是否可以做到。似乎可以这样做,因为我假设过滤器应用于商店,所以它应该是可能的,但我知道这是错误的。

如果有人有任何见解,那就太棒了!感谢。

** Cross Sencha forums发布。

1 个答案:

答案 0 :(得分:0)

最简单的方法是通过在加载时克隆某些记录,更改组属性字段的值并将它们插入到商店中来“伪造”它。因此,在您的示例中,您有两条记录name === "Dan Aykroyd",但其中一条记录为profession === "ghostbuster",另一条记录为profession === "musician"。您需要手动同步重复记录之间的所有更改。稍微麻烦,但它会完成工作。

实际上修改网格分组的工作方式以支持多个值?那是另一个故事。在商店方面,石斑鱼的工作方式与分拣机非常相似。要更改分组的工作方式,您必须在2-5个类之间进行扩展。可能,但可能比它的价值更多的努力。

您需要一种方法来表示记录中的多个值。我建议使用分隔字符串,因为使用数组需要更多的工作来实现。与记录值的比较将成为对Ext.Array.contains(record.get(group.property).split(","), group.name)等的调用。如果您希望网格也是不可分组的,您可能需要在网格列上使用自定义渲染器。如果该列是可编辑的,那么您可能需要特殊的逻辑。

希望能帮助您找到解决方案。