0

Sencha Touch 2.1 を使用したリストで使用するデータセットがあります。このリストでは、ほとんどの項目がプレフィックス (例: P-、S-、CSV- など) で始まります。ただし、そうでないものもあります。

プレフィックスは、リストの並べ替えやグループ化には関係ありません (プレフィックスはユーザーが探しているものではないため)。すべてのアイテムにプレフィックスがあり、すべてのプレフィックスが 1 文字の場合、3 番目の文字で並べ替えるだけです。これは事実ではないので、私は本当に続行する方法がわかりません.

したがって、次の行に沿って条件付きグループ化および並べ替え関数を設定したいと思います: {name} にハイフンが含まれている場合: 最初のハイフンの後の最初の文字で並べ替え/グループ化、そうでない場合: 最初の文字で並べ替え

また、一部の名前はプレフィックスなしで同一になります (例: P-Albumin、U-Albumin) 文字列の残りの部分が同一の場合、「Albumin」を含む行をプレフィックスで並べ替えたいと思います。また、プレフィックスを使用しても、一部の文字列は同じで、「年齢」などの別のフィールドは異なるため、

{ name: 'P-Albumin', age: '40 - 50' },
{ name: 'P-Albumin', age: '20 - 30' },
{ name: 'CSV-Albumin', age: '30' },
{ name: 'ASAT', age: '30'},

文字 A の下にグループ化され、年齢が 20 ~ 30 の行が 40 ~ 50 の行よりも前になり、プレフィックス CSV- を持つ行が両方の前になり、ASAT が最後になるように並べ替えられます。

ヒント、指針、ヘルプ、アドバイスをいただければ幸いです。

4

1 に答える 1

3

名前で並べ替えるには、モデルに変換されたフィールドを作成できます。

Ext.define('MyApp.model.MyModel', {
extend : 'Ext.data.Model',
config : {
    fields : ['name', 'age', 
        {
        name : 'formattedName',
        type : 'string',
        convert : function(v, record) {
            var unformattedName = record.get('name');
            if (unformattedName.indexOf("-") != -1) {
                return unformattedName.substring(unformattedName
                        .indexOf("-"));
            } else {
                return unformattedName;
            }

        }
    }]
}
});

ストア構成でソート優先度を設定できるようになりました

Ext.define('MyApp.store.MyStore', {
extend : 'Ext.data.Store',
config : {
    model : "MyApp.model.MyModel",
    sorters: 'formattedName, name, age'
    ...
}
});

ストアは、最初にプレフィックスを除いた形式の名前を調べ、次にプレフィックスを含む完全な名前を調べ、最後に年齢を調べます。

于 2013-01-22T15:03:41.260 に答える