存储在煎茶触摸

问题描述:

自定义排序我有一个连接到第三方插件(Ext.ux.TouchGridPanel)商店+模型。插件使用相关映射正确调用商店的sort()方法。一切工作正常,商店自行分类。但是,我宁愿将商店分拣添加到商店。我曾尝试在我的模型中添加排序类型字段:存储在煎茶触摸

Ext.regModel("Transactions", { 
    fields: [ 
     { 
      name: 'unit', 
      type: 'string', 
      sortType: function(value) { 
       console.log('PRINT GDAMNIT'); 
       return 0; 
      } 
     }, 

     ... 

    ] 
}); 

但是,这不起作用,sortType未被调用。

TLDR:如何让自定义排序工作专卖店?

你试图做的可能会非常棘手。调用store.sort()默认会删除所有现有的分拣机(根据Sencha Touch API documentation)。要保留现有的分拣机,您需要将分拣机添加到MixedCollectionstore.sorters

其次,调用与自定义排序功能的排序方法,你需要(再次,见API了解详细信息)传递的property特定sorterFn不是到Sorter - 但因为排序这有可能成为棘手呼叫从插件启动。

不知道这是否有助于解决您的问题,但也许它有助于你看看正确的方向。

您的商店将需要添加一个分拣机将排序在该领域之前,它会调用sortType功能。

var store = new Ext.data.Store({ 
    model: 'Transactions', 
    sorters: [ 
     { 
     property: 'unit', 
     direction: 'DESC' 
     } 
    ]} 
); 

Sort type一个字段的值转换成另一个值,以确保正确排序。如果您没有在该字段上排序,那么没有理由调用该函数。您可以将sortDir添加到字段,该字段将根据字段的类型将字段按升序/降序排序。

一种解决方法可能是(我知道这听起来很低效,但我承担),一个额外的字段添加到您的模型实例(允许调用它的SortField),并使用你的排序功能。然后,您可以使用自定义排序算法遍历商店中的模型实例,并将排序值0,1,2,3,4,5等分配给sortField。然后在你的商店里,你可以添加'sorters: 'sortField' ......希望这会有所帮助,我目前正在经历类似的事情。

定制SortType在煎茶触摸2工作。因此,按http://docs.sencha.com/touch/2-0/#!/api/Ext.data.SortTypes

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