2015-02-24 67 views
0

当在'Email'列上触发一个网格面板排序时,如何强制首先对'Name'列进行ASC排序,然后如果EXTJS对'Email'列进行排序,下一个。EXTJS 4.2 - 网格面板多个网格排序

我发现下面的例子是在正确的方向.. http://cdn.sencha.com/ext/gpl/4.2.0/examples/grid/multiple-sorting.html

...但我看不到我怎么会在GridPanel中,当用户点击一个列排序实现这一点,例如使用按钮直接对商店...我认为我可以使用的唯一事件是gridpanel sortchange,但它是一个后期排序事件。

我创建了一个小提琴例如https://fiddle.sencha.com/#fiddle/imt,我把分拣机在店里

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

但与其他列排序在网格中玩耍后,分拣机不优先考虑在“名称”了。

有什么建议吗?

+0

不知道为什么我被拒绝投票给一个合法的问题? – user2574678 2015-02-24 06:19:01

回答

0

如何使用网格上的headerclick事件。这将点击列配置作为参数之一,因此您可以将自己的自定义排序应用到基础商店。

+0

谢谢,将对此进行调查,感谢您的意见。 – user2574678 2015-02-24 18:02:17

+0

Mindparse,你可以扩展我将如何扩大在这里传递的conig吗? – user2574678 2015-02-24 21:55:05

0

但是,它真的是一个问题排序两次?否则,您可以覆盖Ext.grid.header.ContainerView的headertriggerclick事件。

sortchange: function (ct, column, direction, eOpts) { 

var store = column.up('gridpanel').getStore(); 

store.sort([{ 
    property : 'name', 
    direction: 'ASC' 
}, { 
    property : column.dataIndex, 
    direction: direction 
}]); 

} 
+0

谢谢,尝试过,但它使网格排序无响应,我会考虑重写... – user2574678 2015-02-24 18:01:17

0

问题在于字段的命名。您在分拣机中使用了“名称”,但实际字段为“名称”。

fields: [ 
    {name:'name'}, 
    {name:'summaryId'}, 
    {name: 'id'}, 
    {name:'email'}, 
    {name:'phone'}, 
], 

当我将其更改为“名称”时,它将按照提供的分类器和其他分拣机进行分类。

sorters: [{ 
    property: 'name', 
    direction: 'ASC' 
    },{ 
    property:'email', 
    direction: 'DESC' 
    }],