J'utilise une base de données YUI pour créer un tri basique côté client pour certaines statistiques, renvoyé via un service web que j'ai créé. Je ne voulais pas vraiment comprendre les sources de la source de données ajax de YUI, donc je charge les données via jquery et addRow() les données. Le problème est que toutes les données ne sont pas triées correctement. Le champ string semble être un ordre aléatoire, et les colonnes number/float semblent trier comme des chaînes (7 apparaît au-dessus de 635).YUI DataTable Tri
La définition initiale de la table est la suivante:
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"}}
);
Les données sont chargées comme ceci:
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);
}
}
}
Tout remplit, je viens d'obtenir un ordre de tri shite. Qu'est-ce que j'oublie ici?
Merci, Josh
Si vos données ne sont pas triées pour commencer, il suffit de laisser le champ sortedBy. Créer une datatable avec sortedBy indique à YUI que les données sont déjà triées et qu'il doit conserver cet ordre de tri pour les tris futurs. –