0

我想为这样的嵌套选项定义默认值:

$("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因为我不知道开发人员要在这里放置多少过滤器。

任何人都可以提出一个更好的方法来处理这个问题吗?

我被困住了。谢谢

4

1 回答 1

1

因为您希望允许开发人员随意命名过滤器,所以我假设您不想为每个特定过滤器设置任何默认值(您不知道它们的名称!)。

但是,您需要为filters设置一个默认的空对象。所以你的默认值可能是:

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

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

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

所以你需要这样的东西:

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

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

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

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

于 2012-05-16T18:12:34.630 回答