2

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

4

1 回答 1

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);
于 2012-08-18T01:08:01.523 回答