【发布时间】:2010-11-20 14:14:32
【问题描述】:
我正在尝试使用 YUI 数据表来显示来自 JSON 对象的数据,如下所示:
{"results":[{"label":"Column 1","notes":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. "},{"label":"Column 2","notes":"Lorem ipsum dolor sit amet, consectetur adipiscing elit."},{"label":"Column 3","notes":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. "},{"label":"Column 4","notes":"Lorem ipsum dolor sit amet, consectetur adipiscing elit."},{"label":"Column 5","notes":"Lorem ipsum dolor sit amet, consectetur adipiscing elit."},{"label":"Column 6","notes":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. "}]}
我可以通过标准实现很好地做到这一点。但是,列名(上述对象中的标签)是动态的,因此在数据到达页面之前我不会知道它们。因此,我想在 doBeforeParseData() 中定义数据源中的列定义。
从阅读/IRC 中,有人建议我应该能够将列添加到数据表中。我希望表格看起来像这样:
第 1 列第 2 列.......
注意注意.....
所以上面的数据应该产生一行数据。这是我目前所拥有的:
function loadTable() {
YAHOO.example.Basic = function() {
var myColumnDefs = [];
var myDataSource = new YAHOO.util.DataSource("/index/testajax");
myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
myDataSource.doBeforeParseData = function (oRequest, oFullResponse, oCallback) {
// alert(oFullResponse);
var colDefs = [];
var len = oFullResponse.results.length;
for (var i = 0; i < len; i++) {
var obj = {
key: oFullResponse.results[i].label,
sortable: true,
resizeable: true
};
myColumnDefs.push(obj);
}
console.log(myColumnDefs);
return oFullResponse;
};
myDataSource.responseSchema = {
resultsList:"results",
fields: ["label","notes"]
};
var myDataTable = new YAHOO.widget.DataTable("json",
myColumnDefs, myDataSource, {caption:"DataTable Caption"});
return {
oDS: myDataSource,
oDT: myDataTable
};
}();
}
如果您对如何执行此操作而不是为什么我不应该提供任何意见,我们将不胜感激 ;-)
谢谢,
代码牛仔
【问题讨论】: