我想为嵌套选项定义默认值,如下所示:
$("div").filters({
url : 'url.example.com'
filters : {
'projects' : {
'type' : 'dropdown',
'min' : 1,
'max' : 10,
'htmlOptions': {
'name' : 'projects',
'class': 'filters',
'id' : 'project-filter',
}
},
'another' : {
'type' : 'dropdown'
}
...
}
});
我使用jQuery $.extend()
将这些与我的插件代码中的默认值合并如下:
settings = $.extend(defaults,options);
我的代码太大了,所以我可以把它全部放在这里。
我遇到的问题是settings.url
有效,但我不知道如何对settings.filters
执行相同操作,因为我不知道开发人员想要多少过滤器放在这里。
有人可以提出一个更好的方法来解决这个问题吗?
我被困住了。谢谢
答案 0 :(得分:1)
因为您希望允许开发人员根据需要为过滤器命名,我假设您不希望为每个特定过滤器设置任何默认值(您不知道他们的名字!)。
但是,您需要为过滤器设置默认的空对象。 所以你的默认可以是:
var defaults = {
url : '',
filters: {}
};
现在,在合并之后,您需要遍历过滤器对象以查看是否传入了任何过滤器。
看到这个问题: iterating-a-javascript-objects-properties-using-jquery
所以你需要这样的东西:
$.each(settings.filters, function(filterName, value) {
alert(filterName + ": " + value);
});
其中value将是您的过滤器对象{}
您可以使用此循环来访问过滤器对象内的所有属性。
但是,如果您希望开发人员只能初始化过滤器的某些属性 - 例如在您的示例中,过滤器另一个只指定了 type - 您需要使用一组默认过滤器属性扩展每个过滤器。