例如,有一个extjs网格显示以下字段: 学生身份,主题和标记
现在,不同主题的同一学生ID将有不同的标记,我们必须按标记排序,以便计算特定学生ID的标记总数,并按总分数排序。
关于如何在ext js中实现它的任何建议? Sample Example Image
答案 0 :(得分:0)
对于版本 4.2 ,可以在网格列marks
上定义sorterFn。排序时将调用sorterFn进行比较。此函数将计算被比较的两个学生的总分数,并返回-1,0或1以表示哪个更大。
doSort: function (state) {
var store = this.up('grid').getStore();
var field = this.getSortParam();
var records = [];
store.each(function (r) {
records.push(r.copy());
});
store.sort({
property: field,
direction: state,
sorterFn: function (record1, record2) {
var total1 = 0,
total2 = 0;
records.forEach(function (rec) {
if (rec.data.studentID === record1.data.studentID)
total1 += rec.data.marks
});
records.forEach(function (rec) {
if (rec.data.studentID === record2.data.studentID)
total2 += rec.data.marks
});
return total1 > total2 ? 1 : (total1 < total2 ? -1 : 0)
}
});
}
See fiddle here了解网格的示例实现。单击Marks列标题进行排序。
如果您使用ExtJS 6 ,则可以在商店的标记列中添加带有sorterFn的分拣机:
store.sorters.items[0].setSorterFn(function (record1, record2) {
var total1 = 0,
total2 = 0;
records.forEach(function (rec) {
if (rec.data.studentID === record1.data.studentID)
total1 += rec.data.marks
});
records.forEach(function (rec) {
if (rec.data.studentID === record2.data.studentID)
total2 += rec.data.marks
});
return total1 > total2 ? 1 : (total1 < total2 ? -1 : 0)
});
有关创建分拣机功能的详细信息,请参阅Sencha docs。
有关网格的示例实现,请参阅fiddle here。单击Marks列标题进行排序。