解析并填充jQuery插件的选项数组

时间:2012-08-17 21:32:22

标签: javascript jquery json

我正在构建我的第一个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返回一个类型错误,因为它不存在(当然)。如何填充此对象以便我可以有效地使用它以便我可以迭代它?

1 个答案:

答案 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);