2009-08-16 3 views
1

내가 만든 웹 서비스를 통해 반환되는 일부 통계에 대한 기본 클라이언트 측 정렬을 만들려면 YUI 데이터 테이블을 사용하고 있습니다. 유이의 아약스 데이터 소스를 알아 내고 싶지 않으므로 jQuery와 addRow()를 통해 데이터를로드하고 있습니다. 문제는 모든 데이터가 올바르게 정렬되지 않는다는 것입니다. 문자열 필드는 임의의 순서로 보이며 숫자/float 열은 문자열로 정렬되는 것 같습니다 (7은 635 위에 나타남). 다음과 같이YUI DataTable Sorting

초기 테이블 정의는 다음과 같습니다

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

좋아는 야후의 샘플 중 하나에 정보의 임의의 비트를 찾은 후이 알아 냈어. 분명히 업데이트를 한 후에 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에 알리고 이후 정렬을 위해 정렬 순서를 유지해야합니다. –