Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 在Sencha Touch中使用自定义排序存储_Sorting_Sencha Touch_Extjs - Fatal编程技术网

Sorting 在Sencha Touch中使用自定义排序存储

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

我有一个store+模型,它连接到第三方插件(Ext.ux.TouchGridPanel)。该插件使用相关映射正确调用存储的sort()方法。一切都很好,商店也很好。但是,我更愿意将客户分类添加到商店中。我已尝试将sortType字段添加到我的模型中:

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
        }]
    }
});