2012-05-16 1 views
0

Я хотел бы определить значения по умолчанию для вложенных опций, как это:JQuery плагин: Определение значений по умолчанию для СОВМЕЩАЮЩИХСЯ вариантов

$("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

Есть ли количество фильтров, которые пользователь может инициализировать? Знаете ли вы все имена фильтров или они созданы пользователем и могут быть названы? – jfrej

+0

Я хотел разрешить разработчику называть их все, что захочет. Однако, если это не сработает. Я могу просто записать их все, потому что я их знаю. Их всего около 8, но в некоторых случаях используются только два. Так что было бы лучше, если бы я допустил такую ​​гибкость, если бы понимал, что я имею в виду? – Sthe

ответ

1

Поскольку вы хотите разрешить разработчику называть фильтры независимо от того, что они хотят, я предполагаю, что вы не хотите устанавливать значения по умолчанию для каждого конкретного фильтра (вы не знаете их имен!).

Однако вам необходимо установить пустой объект по умолчанию для фильтров. Так что ваши по умолчанию может быть:

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

Теперь, после слияния, вам нужно перебрать фильтров объекта, чтобы увидеть, если есть какие-либо фильтры, передаваемые в

Смотрите этот SO вопрос. : iterating-a-javascript-objects-properties-using-jquery

Так что вам нужно что-то вроде этого:

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

где значение будет вашим фильтрующим объектом {}

Вы можете использовать этот цикл каждый для доступа ко всем свойствам внутри объекта фильтра.

Однако, если вы хотите, чтобы разработчик, чтобы иметь возможность инициализировать только некоторые свойства фильтра - как в вашем примере, где фильтр другой имеет только типа указанного - вам необходимо расширить каждый фильтр с набором свойства фильтра по умолчанию.