1

YUI データテーブルを使用して、作成した Web サービスを介して返されるいくつかの統計の基本的なクライアント側の並べ替えを作成しています。YUI の ajax データソースを理解したくなかったので、jquery を介してデータをロードし、データを addRow() しています。問題は、すべてのデータが適切にソートされていないことです。文字列フィールドはランダムな順序のようで、number/float 列は文字列としてソートされているようです (7 は 635 の上に表示されます)。

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

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 );
    }
  }
}

すべてが読み込まれ、並べ替え順序がたわごとになります。ここで私は何を忘れていますか?

ありがとう、ジョシュ

4

1 に答える 1

1

わかりました、Yahoo のサンプルの 1 つでランダムな情報を見つけた後、これを理解しました。どうやら、更新を行った後に sortedBy フィールドを明示的に null に設定せず、以前に 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 );
于 2009-08-17T17:22:09.920 に答える