Почему мой плагин JQuery не получает свой собственный экземпляр? - PullRequest
1 голос
/ 06 ноября 2010

У меня есть плагин JQuery 1.4.2, который использует набор опций. Это псевдокод такой:

 (function($) {
  // Shell for the plugin code
  $.fn.myPlugIn = function(options) {
    // Plugin code
    return this.each(function() {
      // for each item in selector
      options = $.extend($.fn.myPlugIn.defaults, options);
      ...do stuff
    });
    $.fn.myPlugIn.defaults = {
    header      :   null,
    position    :   'absolute',
    top         :   null,
    left        :   null,
    forinput    :   null,
    forAnchor   :   null,
    sAjaxSource :   null,
    onClick     :   null
  };
  })(jQuery);

При вызове плагина для нескольких элементов на одной странице параметры не являются уникальными - параметры предыдущих элементов все еще находятся в параметрах.

$(document).ready(function() {
    $("#div1").myPlugIn(
            {forinput: "input1",
             onClick: function(data){
                ... do stuff
            },
    });
    $("#div2").myPlugIn({
          forAnchor: "link1",
            onClick: function(data){
                ... do stuff
             },
        header: "Parts"
    });

});

Что я делаю не так? Я ожидал, что каждый раз, когда плагин будет найден, он будет использовать параметры, переданные ему. Вместо этого он сохраняет все параметры из первого экземпляра и перезаписывает все повторно инициализированные свойства из второго экземпляра.

Любые ответы приветствуются. Заранее спасибо за чтение моего поста.

Ответы [ 2 ]

4 голосов
/ 06 ноября 2010

Вам необходимо объединить опции в новый объект для этого экземпляра, например:

options = $.extend({}, $.fn.myPlugIn.defaults, options);

$.extend() объединяет в первый аргумент все объекты, переданные в качестве параметров после этого, поэтому в настоящее время они объединяются с вашими значениями по умолчанию $.fn.myPlugIn.defaults, оставляя его испорченным для следующего использования. Вместо этого вы хотите никогда не связываться со значениями по умолчанию (если только не намеренно измените их в другом месте) и объединить параметры и значения по умолчанию в другой новый объект.

1 голос
/ 06 ноября 2010

Вторым делом будет добавление 'var options = ...', пропуск var делает его глобальной переменной, эти параметры устанавливают для последних вызываемых атрибутов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...