2

私はDOJO 1.6を学んでいます。

私はデータを持っています

var data = [
        { FirstName: 'xyz', Lastname: 'QSD', rollNo: '1', EntryDate: '2012-09-11T17:35:31.835+02:00' },
        { FirstName: 'abc', Lastname: 'qgr', rollNo: '2', EntryDate: '2012-08-11T17:35:31.835+02:00' }
        { FirstName: 'ert', Lastname: 'fgd', rollNo: '3', EntryDate: '2012-18-11T17:35:31.835+02:00' }
    ];

Last nameやEntryDateでソートしてツリー形式で表示したい。

前もって感謝します。


複数のルート データ

data: [
            { id: 'world', name:'The earth', type:'planet', population: '6 billion'},
            { id: 'AF', name:'Africa', type:'continent', population:'900 million', area: '30,221,532 sq km',
                    timezone: '-1 UTC to +4 UTC', parent: 'world'},
                { id: 'EG', name:'Egypt', type:'country', parent: 'AF' },
                { id: 'KE', name:'Kenya', type:'country', parent: 'AF' },
                    { id: 'Nairobi', name:'Nairobi', type:'city', parent: 'KE' },
                    { id: 'Mombasa', name:'Mombasa', type:'city', parent: 'KE' },
                { id: 'SD', name:'Sudan', type:'country', parent: 'AF' },
                    { id: 'Khartoum', name:'Khartoum', type:'city', parent: 'SD' },
            { id: 'AS', name:'Asia', type:'continent', parent: 'world' },
                { id: 'CN', name:'China', type:'country', parent: 'AS' },
                { id: 'IN', name:'India', type:'country', parent: 'AS' },
                { id: 'RU', name:'Russia', type:'country', parent: 'AS' },
                { id: 'MN', name:'Mongolia', type:'country', parent: 'AS' },
            { id: 'OC', name:'Oceania', type:'continent', population:'21 million', parent: 'world'},
            { id: 'EU', name:'Europe', type:'continent', parent: 'world' },
                { id: 'DE', name:'Germany', type:'country', parent: 'EU' },
                { id: 'FR', name:'France', type:'country', parent: 'EU' },
                { id: 'ES', name:'Spain', type:'country', parent: 'EU' },
                { id: 'IT', name:'Italy', type:'country', parent: 'EU' },
            { id: 'NA', name:'North America', type:'continent', parent: 'world' },
            { id: 'SA', name:'South America', type:'continent', parent: 'world' }
        ],
4

1 に答える 1

3

JavascriptArrayには と呼ばれるネイティブ関数がありsortます。これにより、既製の値がアルファベット順にソートされます。文字列以外の値をソートするには、ソート関数を提供する必要があります。そのように、に関してLastname

data.sort(function(a,b) {
    var _A=a.Lastname.toLowerCase(), 
        _B=b.Lastname.toLowerCase();

    if (_A < _B) //sort string ascending
      return -1 
    if (_A > _B)
      return 1
    return 0 //default return value (no sorting)
});

日付に対してソートする場合は、初期化_A_BDate.

dataただし、 を で表現することを目指している場合はdijit.Tree、 をソートする組み込みの方法がありStoreます。ラップdatadojo/data/ItemFileReadStoreてツリーに表示します。ツリーには - を使用してモデルがあり、ItemFileWriteStoreアイテムを変更できるようになります。

var sortableStore = new dojo.data.ItemFileReadStore({
    data: {
        identifier: 'rollNo',
        items: data
    },
    comperatorMap: {
        'EntryDate' : function(a,b) {
            var _A = new Date(a), _B = new Date(b);
            if(_A > _B) return 1;
            else if(_A == _B) return 0;
            else return -1;
        }
});

「sort」パラメーターを設定する際に「store.fetch()」API を使用すると、返されるアイテムの順序を制御できます。Array.sort()EntryDate は、適切に並べ替えるために、関数の comperatorMap を作成する必要があります。ドキュメントを参照してください。

var model = new dijit.tree.ForestStoreModel({
    rootLabel: 'Names',
    store: new dojo.data.ItemFileWriteStore({
        data: {
            identifier: 'rollNo',
            items: data, 
  // blank, initially - can fill in with 'data' to show non-sorted items until sort is called
            label: 'FirstName'
        }
    }) // blank itemsstore
});

var tree = new dijit.Tree({
    model: model
});

OK、すべて設定 - しかし問題.fetchは、コールバック (onComplete) で実行され、再帰的な方法で制御するのが難しいことです。代わりに、THIS FIDDLEに配置された機能はストア データを複製し、ネイティブ配列ソートを使用してソートしSimpleQueryEngineます。

これにより、より信頼性の高い結果が得られることが証明されますが、DnD コントローラーと永続化フラグが混乱します。

ここで返されたアイテムを store がどのようにソートするかを確認してfetchください: fiddle。ただし、これは一度に 1 つの「レベル」のみをソートし、深いソートは実行しません。
IMO:ソートの適切な実装は、サーバー側のソートであり、データベース クエリで直接実行されます

http://dojotoolkit.org/reference-guide/1.8/dojo/data/ItemFileReadStore.html#custom-sorting

http://dojotoolkit.org/reference-guide/1.8/dijit/Tree.html

于 2012-10-01T19:42:38.483 に答える