2009-08-16 3 views
1

私は作成したWebサービスを介して返されたいくつかの統計情報の基本的なクライアントサイドソートを作成するためにYUIデータテーブルを使用しています。 YUIのajaxデータソースを理解したくないので、データをjquery経由で読み込み、addRow()メソッドを使ってデータを読み込んでいます。問題は、すべてのデータが適切にソートされていないことです。文字列フィールドはランダムな順序のようで、数値/浮動小数点の列は文字列としてソートされているようです(7は635の上に表示されます)。次のようにYUI DataTableソート

初期テーブル定義は、次のとおりです。

var myColumnDefs = [ 
    {key:"appname",label:"Application Name", sortable:true}, 
    {key:"membercount",label:"Member Count",formatter:YAHOO.widget.DataTable.formatNumber,sortable:true}, 
    {key:"loggedin",label:"Logged In",formatter:YAHOO.widget.DataTable.formatNumber,sortable:true}, 
    {key:"peakoccupance",label:"Peak Occupance",formatter:YAHOO.widget.DataTable.formatNumber,sortable:true}, 
    {key:"averageoccupance",label:"Average Occupance",formatter:YAHOO.widget.DataTable.formatFloat,sortable:true} 
]; 

this.myDataSource = new YAHOO.util.DataSource([]); 
this.myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSARRAY; 
this.myDataSource.responseSchema = { 
    fields: [{key:"appname", parser:YAHOO.util.DataSourceBase.parseString}, 
     {key:"membercount", parser:YAHOO.util.DataSourceBase.parseNumber}, 
     {key:"loggedin", parser:YAHOO.util.DataSourceBase.parseNumber}, 
     {key:"peakoccupance", parser:YAHOO.util.DataSourceBase.parseNumber}, 
     {key:"averageoccupance", parser:YAHOO.util.DataSourceBase.parseNumber} 
    ] 
}; 

this.myDataTable = new YAHOO.widget.DataTable("markup", myColumnDefs, this.myDataSource, 
     {sortedBy:{key:"membercount",dir:"desc"}} 
); 

データは次のようにロードされます

function xmlCallback(xml){ 
    if($(xml).find('memberCount').text() != "0"){ 
    var appName = $(xml).find('appname').text(); 
    var appID = $(xml).find('appid').text();   
    var memberCount = $(xml).find('memberCount').text(); 
    var zoneOccupance = $(xml).find('zoneOccupance').text(); 
    var peakOccupance = $(xml).find('peakOccupance').text(); 
    var averageOccupance = $(xml).find('averageOccupance').text(); 

    console.log(appName+" loaded..."); 

    if(memberCount != "0"){ 

     var allData = { 
     row: count, 
     appname: appName, 
     membercount: memberCount, 
     loggedin: zoneOccupance, 
     peakoccupance: peakOccupance, 
     averageoccupance: averageOccupance 
     }; 

     sococo.myDataTable.addRow(allData, count); 
     count++; 
     $("appsloaded").html(count); 
    } 
    else{ 
     appCount--; 
     $("totalapps").html(appCount); 
    } 
    } 
} 

すべてが移入され、私はちょうどシテソート順を取得します。私はここで何を忘れていますか?

おかげで、オーケー ジョシュ

答えて

1

は、Yahooのサンプルのいずれかで情報のランダムビットを発見した後にこれを考え出しました。どうやら、あなたが更新を行った後にsortedByフィールドを明示的にnullに設定せずに、以前にsortedByオプションを宣言していた場合、以前に見つかった並べ替え順序が保持されます。私の推測は、同じコストの高いクライアント側を何度も何度も繰り返し実行しないように、キャッシュのようなものです。

だから、これを修正したコードは以下の通りであった:あなたのデータは、単にsortedByフィールドを残して、そもそもソートされていない場合

var allData = { 
    row: count, 
    appname: String(appName), 
    membercount: Number(memberCount), 
    loggedin: Number(zoneOccupance), 
    peakoccupance: Number(peakOccupance), 
    averageoccupance: Number(averageOccupance) 
}; 

sococo.myDataTable.addRow(allData, count); 
sococo.myDataTable.set("sortedBy", null); 
+0

。 sortedByを使用してデータテーブルを作成すると、データがすでにソートされていることがYUIに通知され、将来のソートのためにそのソート順を維持する必要があります。 –

関連する問題