将带有自定义排序的存储在Sencha Touch中

| 我有一个商店+模型,该模型已连接到第三方插件(Ext.ux.TouchGridPanel)。插件会使用相关映射正确调用商店的sort()方法。一切正常,商店自行整理。但是,我希望将客户排序添加到商店中。我尝试将sortType字段添加到模型中:
Ext.regModel(\"Transactions\", {
    fields: [
        {
            name: \'unit\',
            type: \'string\',
            sortType: function(value) {
                console.log(\'PRINT GDAMNIT\');
                return 0;
            }
        },

        ...

    ]
});
但是,这不起作用,并且没有调用sortType。 TLDR:如何使商店进行自定义排序?     
已邀请:
您的商店将需要添加一个排序器,该排序器将在对该字段进行排序之前调用sortType函数。
var store = new Ext.data.Store({ 
   model: \'Transactions\',
   sorters: [
      {
        property: \'unit\',
        direction: \'DESC\'
      }
   ]}
);
排序类型将字段的值转换为另一个值,以确保正确排序。如果您不在该字段上排序,则没有理由调用该函数。您可以将sortDir添加到字段中,该字段将仅根据字段的类型将字段排序为升序/降序。     
解决方法可能是(我知道这听起来效率不高,但请耐心接受)在模型实例中添加一个额外的字段(我们称其为sortField),并将其用于排序功能。然后,您可以应用自定义排序算法遍历商店中的模型实例,并将排序值0、1、2、3、4、5等分配给sortField。然后,在您的商店中,您可以添加ѭ2...。希望这会有所帮助,我目前正在尝试类似的操作。     
根据http://docs.sencha.com/touch/2-0/#!/api/Ext.data.SortTypes,Sencha Touch 2中的自定义SortType可以正常工作:
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
        }]
    }
});
    
您尝试做的事情可能很棘手。默认情况下,调用ѭ4会删除所有现有分类器(根据Sencha Touch API文档)。为了保留现有的分类器,您需要将分类器添加到
MixedCollection
store.sorters
中。 其次,要使用自定义排序功能调用sort方法,您需要将特定的
sorterFn
而不是
property
传递给
Sorter
(同样,请参见API以获取更多详细信息)-但这可能会很棘手,因为sort调用是从插件。 不知道这是否有助于解决您的问题,但也许可以帮助您寻找正确的方向。     

要回复问题请先登录注册