jQuery插件:定义NESTED选项的默认值

时间:2012-05-16 15:20:08

标签: jquery plugins nested options extend

我想为嵌套选项定义默认值,如下所示:

$("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执行相同操作,因为我不知道开发人员想要多少过滤器放在这里。

有人可以提出一个更好的方法来解决这个问题吗?

我被困住了。谢谢

1 个答案:

答案 0 :(得分:1)

因为您希望允许开发人员根据需要为过滤器命名,我假设您不希望为每个特定过滤器设置任何默认值(您不知道他们的名字!)。

但是,您需要为过滤器设置默认的空对象。 所以你的默认可以是:

var defaults = {
    url : '',
    filters: {}
};

现在,在合并之后,您需要遍历过滤器对象以查看是否传入了任何过滤器。

看到这个问题: iterating-a-javascript-objects-properties-using-jquery

所以你需要这样的东西:

$.each(settings.filters, function(filterName, value) {
    alert(filterName + ": " + value);
});

其中value将是您的过滤器对象{}

您可以使用此循环来访问过滤器对象内的所有属性。

但是,如果您希望开发人员只能初始化过滤器的某些属性 - 例如在您的示例中,过滤器另一个只指定了 type - 您需要使用一组默认过滤器属性扩展每个过滤器。