Sorting 在Sencha Touch中使用自定义排序存储
我有一个store+模型,它连接到第三方插件(Ext.ux.TouchGridPanel)。该插件使用相关映射正确调用存储的sort()方法。一切都很好,商店也很好。但是,我更愿意将客户分类添加到商店中。我已尝试将sortType字段添加到我的模型中:Sorting 在Sencha Touch中使用自定义排序存储,sorting,sencha-touch,extjs,Sorting,Sencha Touch,Extjs,我有一个store+模型,它连接到第三方插件(Ext.ux.TouchGridPanel)。该插件使用相关映射正确调用存储的sort()方法。一切都很好,商店也很好。但是,我更愿意将客户分类添加到商店中。我已尝试将sortType字段添加到我的模型中: Ext.regModel("Transactions", { fields: [ { name: 'unit', type: 'string', so
Ext.regModel("Transactions", {
fields: [
{
name: 'unit',
type: 'string',
sortType: function(value) {
console.log('PRINT GDAMNIT');
return 0;
}
},
...
]
});
但是,这不起作用,并且不会调用sortType
TLDR:如何为商店进行自定义排序?您试图做的事情可能很棘手。调用
store.sort()
默认情况下会删除所有现有的分拣机(根据)。要保留现有分拣机,您需要将分拣机添加到MixedCollection
store.sorter
其次,要使用自定义排序函数调用sort方法,需要将特定的sorterFn
而不是属性
传递给Sorter
(再次,请参阅了解更多详细信息)-但这可能会很棘手,因为排序调用是从插件启动的
不确定这是否有助于解决您的问题,但可能有助于您找到正确的方向。您的商店需要添加一个分拣机,在调用sortType函数之前,该分拣机将在该字段上进行分拣
var store = new Ext.data.Store({
model: 'Transactions',
sorters: [
{
property: 'unit',
direction: 'DESC'
}
]}
);
将字段的值转换为另一个值以确保正确排序。如果不在该字段上排序,则没有理由调用该函数。您可以将sortDir添加到字段中,该字段将根据字段的类型单独按升序/降序对字段进行排序。一个解决方法可能是(我知道这听起来效率很低,但请耐心等待)向模型实例中添加一个额外字段(我们称之为sortField),并将其用于排序功能。然后,可以应用自定义排序算法在应用商店中的模型实例中循环,并指定排序值0、1、2、3、4、5等。。到索特菲尔德。然后在您的商店中,您可以添加
“分拣机:'sortField'
。。。希望这能有所帮助,我目前正在经历类似的事情。Sencha Touch 2中的自定义排序类型也会相应工作,如下所示:
Ext.apply(Ext.data.SortTypes, {
asPerson: function(person){
// expects an object with a first and last name property
return person.lastName.toUpperCase() + person.firstName.toLowerCase();
}
});
Ext.define('Employee', {
extend: 'Ext.data.Model',
config: {
fields: [{
name: 'person',
sortType: 'asPerson'
}, {
name: 'salary',
type: 'float' // sortType set to asFloat
}]
}
});