Я работаю над плагином jQuery и, похоже, не могу изменить настройки по умолчанию, вот фрагмент плагина.

        $.Auction  = {

        defaults: {
            parentId: '#span',
            bidButtonClassName: '.live_bid'
        }
    };


    $.setAuction = function(options){

        startAuction();

    }

    function startAuction(){

            var options = $.extend({}, $.Auction.defaults, options);
            alert(options.parentId);

    }



    $.setAuction({parentId: '#div'});

В основном я пытаюсь переопределить значение parentId внизу, но оно всегда предупреждает значение #span. Есть идеи, что я делаю не так? Спасибо!

0
dzm 2 Авг 2010 в 10:17

2 ответа

Лучший ответ

Вы передаете {parentId: '#div'} в качестве аргумента для $.setAction, но на самом деле не используете его. Вы хотите сделать что-то вроде этого:

$.setAuction = function(options){
    startAction(options);
}

function startAction(options){
        options = $.extend({}, $.Auction.defaults, options);
        alert(options.parentId);
}

Изменить: @TmEllis предлагает лучший способ реализации этой функции, но его можно улучшить, сделав сами параметры по умолчанию настраиваемыми:

(function($)
{
    $.fn.setAuction = function(options)
    {   
        options = $.extend({}, $.fn.setAuction.defaults, options);
        return this.each(function()
        {
            alert($(this).id);
        });
    };

    $.fn.setAuction.defaults =
    {
        bidButtonClassName: '.live_bid' 
    };
})(jQuery);

См. эту статью для более полного обсуждения того, как писать хорошие плагины jQuery.

1
Will Vousden 2 Авг 2010 в 10:48

Думаю, нужно немного изменить код.

$.fn.setAuction было бы лучше, чем $.setAuction (они делают две разные вещи)

Как вы могли сделать:

$("#span").setAuction ({bidButtonClassName:"classname"});

И передайте ему элемент как селектор, а не как параметры плагина (если он не должен быть в параметрах)

Тогда код вашего плагина может выглядеть примерно так:

(function($) {

    $.fn.setAuction  = function(options) {   
        var defaults = {
          bidButtonClassName: '.live_bid' 
        };


      var options = $.extend(defaults, options);
      //or to preserve defaults
      var options = $.extend({}, defaults, options);

      return this.each(function() {
          obj = $(this); //"#span"
          alert(obj.id);


      });
   };
})(jQuery);
1
3 Авг 2010 в 15:40