Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.09.2011, 16:52
Новичок на форуме
Отправить личное сообщение для gonzo76 Посмотреть профиль Найти все сообщения от gonzo76
 
Регистрация: 07.09.2011
Сообщений: 5

Как делать доступ к переменным из функций?
Всем привет!

Я делаю плагин на jQuery и возник такой вопрос. Вот код:

(function($)
{
  $.fn.my_plugin = function()
  {
    return this.each(function() {
      var container = $(this);
      var link = container.find("a");
      create();
    });

      function create() {
        alert(container);
        alert(link);
      }
  };
}) (jQuery);


Я хочу иметь возможность один раз сохранить ссылки на некоторые внутренние элементы и потом иметь к ним доступ из метода. Как такое можно сделать?
Ответить с цитированием
  #2 (permalink)  
Старый 07.09.2011, 16:59
Аватар для walik
Профессор
Отправить личное сообщение для walik Посмотреть профиль Найти все сообщения от walik
 
Регистрация: 09.11.2009
Сообщений: 1,101

(function($)
{
  $.fn.my_plugin = function()
  {
    var container, link;
    return this.each(function() {
      container = $(this);
      link = container.find("a");
      create();
    });
 
      function create() {
        alert(container);
        alert(link);
      }
  };
}) (jQuery);
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай
Ответить с цитированием
  #3 (permalink)  
Старый 07.09.2011, 17:35
Новичок на форуме
Отправить личное сообщение для gonzo76 Посмотреть профиль Найти все сообщения от gonzo76
 
Регистрация: 07.09.2011
Сообщений: 5

На сколько я понимаю, такой вариант создаёт переменные видимости всего плагина, верно? А хотелось бы чтобы были отдельные для каждого элемента, который попал под селект $(".my-plugin").my_plugin().
Ответить с цитированием
  #4 (permalink)  
Старый 07.09.2011, 17:40
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Тогда так:
(function($)
{
  $.fn.my_plugin = function()
  {
    return this.each(function() {
      var container = $(this);
      var link = container.find("a");
      create(container, link);
    });

      function create(container, link) {
        alert(container);
        alert(link);
      }
  };
}) (jQuery);
Ответить с цитированием
  #5 (permalink)  
Старый 07.09.2011, 17:42
Новичок на форуме
Отправить личное сообщение для gonzo76 Посмотреть профиль Найти все сообщения от gonzo76
 
Регистрация: 07.09.2011
Сообщений: 5

Спасибо.

Это первое что приходит в голову, но неудобно таскать все переменные. А чего-то более приближенному к раздению переменных объекта между методами как в классовых языках в нет?
Ответить с цитированием
  #6 (permalink)  
Старый 07.09.2011, 17:43
Новичок на форуме
Отправить личное сообщение для gonzo76 Посмотреть профиль Найти все сообщения от gonzo76
 
Регистрация: 07.09.2011
Сообщений: 5

Просто в реальности у меня с десяток этих переменных.
Ответить с цитированием
  #7 (permalink)  
Старый 07.09.2011, 18:09
Профессор
Отправить личное сообщение для ваый Посмотреть профиль Найти все сообщения от ваый
 
Регистрация: 29.06.2011
Сообщений: 445

Пересмотри структуру своего плагина. Например:
$.fn.slapAss = function(options) {
    var options = $.extend({
        buttSize: 'medium'
    }, options);

    var Butt = function(el) {
        var $ass = $(el);
        var $pants = $ass.find('.pants');

        this.init   = function() {...};
        this.create = function() { alert($pants) };
        this.putOff = function() { alert($pants) };
    };

    return this.each(function() {
        new Butt($(this)).init();
    });
};

Последний раз редактировалось ваый, 07.09.2011 в 18:12.
Ответить с цитированием
  #8 (permalink)  
Старый 07.09.2011, 19:05
Новичок на форуме
Отправить личное сообщение для gonzo76 Посмотреть профиль Найти все сообщения от gonzo76
 
Регистрация: 07.09.2011
Сообщений: 5

Спасибо за наводку. В итоге сделал так
(function($)
{
  $.fn.my_plugin = function()
  {
    return this.each(function() {
      var self = this;
      var ivar = Math.random(1000);

      $(this).click(function() {
        self.clicked("a1")
      });

      this.clicked = function(a) {
        alert(ivar)
      }
    });
  };
}) (jQuery);
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сложить результаты двух(и более) функций? art-kl Элементы интерфейса 2 26.08.2009 16:56
Как делать переменные имена свойств? khusamov Общие вопросы Javascript 2 04.08.2009 22:10
Как правильно послать XML в POST запросе LowCoder AJAX и COMET 10 15.07.2009 23:20
Можно ли как для произвольного массива создавать вызовы функций , имеющих на входе kefi Общие вопросы Javascript 3 17.04.2009 16:53
dynatree.jquery - как получть доступ к родительскому узлу. ast-ross jQuery 0 23.03.2009 18:39