2016-08-23 8 views
0

現在、dgrid(後で貼り付け)でカスタムソート機能を使用しています。それは大幅にソートを変更せず、ある特定の列を一意にソートし、大文字と小文字を区別しないようにソートします。他の列がソートされたときにソートに追加される "スケジュールされた"列のセカンダリソートを追加したいと思います。私はそれについてどうやって行くのか分かりません。私はソートをオーバーライドして2つの列でソートする方法を見てきましたが、カスタムソートが有効なときは表示されません。セカンダリソートは、他のどの列がクリックされても問題ありません。dgridセカンダリソートカラムを使用したカスタムソート

私はdojo 1.10とdgrid 1.0を実行しています。 RequestMemory DStoreからデータが来ています。私は実際には、店舗レベルではなく、グリッド上でこのような処理を行っています。どんな助けもありがとう。

currGrid.on('dgrid-sort', function (event) { 
 
    event.preventDefault(); 
 
    var sort = event.sort[0]; 
 
    currGrid.set('sort', function (a, b) { 
 
    if (sort.property == "thisField") { 
 
     //special sort for thisField 
 
     if (a[sort.property] !== 'undefined' && typeof a[sort.property] == "string") { 
 
      var colorA = a[sort.property].split("|"); 
 
      var aValue = colorA[0].toLowerCase(); 
 
     } 
 
     if (b[sort.property] !== 'undefined' && typeof b[sort.property] == "string") { 
 
      var colorB = b[sort.property].split("|"); 
 
      var bValue = colorB[0].toLowerCase(); 
 
     } 
 
     if (String(aValue) == String(bValue)) { 
 
      var result = 0; 
 
     } else if (dojo.string.trim(aValue) == "") { 
 
      var result = true ? 1 : -1; 
 
     } else if (dojo.string.trim(bValue) == "") { 
 
     var result = true ? -1 : 1; 
 
     } else { 
 
     var result = aValue > bValue ? 1 : -1; 
 
     } 
 
     return result * (sort.descending ? -1 : 1); 
 
    } else { 
 
     //Sort for all other fields same as always (except toLowerCase) 
 
     if (a[sort.property] !== 'undefined' && typeof a[sort.property] == "string") { 
 
      var aValue = a[sort.property].toLowerCase(); 
 
     } else { 
 
      var aValue = ""; 
 
     } 
 
     if (b[sort.property] !== 'undefined' && typeof b[sort.property] == "string") { 
 
      var bValue = b[sort.property].toLowerCase(); 
 
     } else { 
 
      var bValue = ""; 
 
     } 
 
     var result = aValue > bValue ? 1 : -1; 
 
     return result * (sort.descending ? -1 : 1); 
 
    } 
 
    }); 
 
    currGrid.updateSortArrow(event.sort, true); 
 
}); 
 
currGrid.startup();

答えて

0

あなたは、以下のような何かを行うことができます。

currGrid.on('dgrid-sort', function (event) { 
    event.preventDefault(); 
    var sortSet = []; 
    sortSet.push(event.sort[0]); 
    sortSet.push({property: "scheduled"}); 
    currGrid.set('sort', function (a, b) { 
     var aValue, bValue, result = 0; 
     for(var i = 0; i < sortSet.length; i++){ 
      var sort = sortSet[i]; 
      if (sort.property == "thisField") { 
       //special sort for thisField 
       if (a[sort.property] !== 'undefined' && typeof a[sort.property] == "string") { 
        var colorA = a[sort.property].split("|"); 
        aValue = colorA[0].toLowerCase(); 
       } 
       if (b[sort.property] !== 'undefined' && typeof b[sort.property] == "string") { 
        var colorB = b[sort.property].split("|"); 
        bValue = colorB[0].toLowerCase(); 
       } 
       if (String(aValue) == String(bValue)) { 
        result = 0; 
       } else if (dojo.string.trim(aValue) == "") { 
        result = true ? 1 : -1; 
       } else if (dojo.string.trim(bValue) == "") { 
        result = true ? -1 : 1; 
       } else { 
        result = aValue > bValue ? 1 : -1; 
       } 
       return result * (sort.descending ? -1 : 1); 
      } else { 
       //Sort for all other fields same as always (except toLowerCase) 
       if (a[sort.property] !== 'undefined' && typeof a[sort.property] == "string") { 
        aValue = a[sort.property].toLowerCase(); 
       } else { 
        aValue = ""; 
       } 
       if (b[sort.property] !== 'undefined' && typeof b[sort.property] == "string") { 
        bValue = b[sort.property].toLowerCase(); 
       } else { 
        bValue = ""; 
       } 
       //You need this check here 
       if(aValue != bValue){ 
        result = aValue > bValue ? 1 : -1; 
        return result * (sort.descending ? -1 : 1); 
       } 
      } 
     } 
     return 0; 
    }); 
    currGrid.updateSortArrow(event.sort, true); 
}); 
currGrid.startup(); 

私はあなたのコードについていくつかの懸念を持っている、変数result, aValue and bValueは、すべてのif文、まだ彼らは声明外で使用されている内にローカルです。グローバルスペース内で同じ名前で他の変数が定義されていると、結果が正しくない可能性があります。だから私はそれらを修正しました。

ですから、aValue == bValueは遅延がこれにあなたに戻って取得するために申し訳ありませんが、私はこれをテストしてみた、それはへの最初のクリックで素晴らしい作品0

+0

@T Kambiを返すためにかどうかを確認するために必要な第二のセクション任意の列を並べ替えます。ただし、他の列が反対方向にソートされている場合は、スケジュールされた列の並べ替えが逆になります。私はスケジュールされた(セカンダリソート列)を常に昇順にしたい。 sortSet.push({property: "scheduled"、descending:false});にsortSet.push({property: "scheduled"});を変更しようとしました。それはそれをしなかった。私はおそらく私の元の質問でこれではっきりしていなかったが、もしあなたがそれをうまく手助けすることができれば、私は大いに感謝するだろう。 – BLWedge09

+0

スケジュールソートは、そのオプションの降順プロパティを設定していないので、常に昇順です。ただし、他のソートオプションよりも優先順位が高くなります。 「スケジュール」を最優先にしたい場合は、まずスケジュールのソートを追加し、次にソートセットにもう1つのソートを追加します。 –

+0

はい、あなたは完全に正しいです。私がクリックしていた列にはデータが隠されていたため、並べ替えが計画通り進まなかった。すべてが今のように機能します。ありがとう@Tカンビ – BLWedge09

関連する問題