0

このリンクhttps://github.com/SitePen/dgrid/issues/276で kfranqueiro によって提案されているように、dgrid の並べ替えロジックをオーバーライドしようとしています。

サーバーからデータをソートされた順序で取得し、列ヘッダーの UI を更新したいだけです。私はこれをやっています -

On(mygrid, 'dgrid-sort', lang.hitch( this,function(event){
    var sort = event.sort[0];
    var order = this.sort.descending ? "descending" : "ascending";
    console.log("Sort "+ this.sort.property + " in " +order+" order.");
    event.preventDefault();
    mygrid.updateSortArrow(event.sort, true);
    myFunctionToRefreshGrid();
}));
...
myFunctionToRefreshGrid: function() {
   ...//get data from server in sorted order
   var mystore = new Memory({data: sortedDataFromServer, idProperty: 'id'});
   mygrid.set("collection", mystore);
   ...
}

Memoryこちらです"dstore/Memory"。私は使用dgrid 0.4, dstore 1.1していますdojo 1.10.4

呼び出す前に、それが望ましいソート順になっていることがset('collection',...)わかります。sortedDataFromServerしかし、何らかの理由で、グリッド内の順序が異なります。たとえば、降順で並べ替えると、小文字で始まる値が最初に降順で表示され、次に大文字で始まる値が並べ替えられます。dstore がさらに何かをしているようです。

何が起こっているのでしょうか?私は何か間違ったことをしていますか?カスタムソートを行う別の/より良い方法はありますか?

ありがとう、

4

2 に答える 2

0

私はあなたが正しいことをしていると思います。ここでの問題は、グリッドの並べ替えプロパティをリセットしていないことだけです。並べ替えられた順序でメモリを再度開始すると、自動的に並べ替えられます。

あなたが電話した後

event.preventDefault();

これを呼び出す

  mygrid.set("sort", null);

次のように、グリッドの1つでカスタムソートを行っています

                self.xrefGrid.on("dgrid-sort", function (event) {
                var sort = event.sort[0];
                    event.preventDefault();
                    self.xrefGrid.set('sort', function (a, b) {
                        var aValue,bValue;
                        if (a[sort.attribute] && typeof a[sort.attribute] == "string")
                             aValue = a[sort.attribute].toLowerCase();
                        if (b[sort.attribute] && typeof b[sort.attribute] == "string")
                             bValue = b[sort.attribute].toLowerCase();
                        var result = aValue > bValue ? 1 : -1;
                        return result * (sort.descending ? -1 : 1);
                    });
                    self.xrefGrid.updateSortArrow(event.sort, true);
            });
于 2015-08-25T13:20:21.737 に答える