YUI DataTable排序
问题描述:
我正在使用YUI数据表为一些统计信息创建一些基本的客户端排序,通过我创建的Web服务返回。不太想弄清楚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);
}
}
}
填充的一切,我只是得到一个法士特排序顺序。我在这里忘了什么?
感谢, 乔希
答
好了,在雅虎的样本之一查找信息的随机位后想通了这一点。显然,如果您在更新之后未明确将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);
如果您的数据不排序开始说起,简单地离开了sortedBy领域。用sortedBy创建一个数据表格告诉YUI数据已经被排序,并且它应该保持这个排序顺序以备将来排序。 – 2011-08-18 18:03:58