我正在构建我的第一个jQuery插件。它需要JSON数据并将其加载到表中。我已经完成了大部分逻辑,我只是在构建默认选项数组时遇到了麻烦。
我想要做的是传递一个像这样的选项数组:
/* Column array format:
cols:
[colname:
{
title: 'Column Title', // Column title for display (if not specified, will
// use 'colname' value instead.
sorttype: 'text', // 'text', 'dropdown' or 'none'
},
nextcolname:
{
...
},
...
]
*/
如果没有传入任何选项,我遇到的问题是打包默认数组。这就是我所拥有的:
var settings = $.extend ({
'cols' : 'auto',
'sortable' : 'true' //turn off sorting altogether with this option.
}, options);
var index = '';
var element = '';
var colname = '';
// No columns specified. That's OK, grab keys from first JSON element.
if (settings.cols == 'auto')
{
settings.cols = Object.keys(data[0]);
$.each(settings.cols, function(index, colname){
settings.cols[colname].title = colname;
settings.cols[colname].sorttype = 'text';
})
}
首先,风格方面,看起来我正在以正确的方式解决这个问题吗?选择数组的格式和我解析它的方式都有意义吗?其次,settings.cols [colname] .title返回一个类型错误,因为它不存在(当然)。如何填充此对象以便我可以有效地使用它以便我可以迭代它?
答案 0 :(得分:2)
您指定 settings.cols 的行无法正常工作...它会分配数组而不是属性映射。试试这个:
var keys = Object.keys(data[0]);
for (var i in keys) settings.cols[keys[i]] = {};
这是一个完整的测试,显示了差异。 settings1 使用上述内容生效,但尝试访问 settings2 会引发错误:
var data = { a: 1, b: 2, c: 3 };
var keys = Object.keys(data);
var settings1 = { cols: {} };
var settings2 = { cols: {} };
for (var i in keys) settings1.cols[keys[i]] = {title: "hi"};
settings2.cols = Object.keys(data);
alert(settings1.cols["b"].title);
alert(settings2.cols["b"].title);