Как делать доступ к переменным из функций?
Всем привет!
Я делаю плагин на 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); Я хочу иметь возможность один раз сохранить ссылки на некоторые внутренние элементы и потом иметь к ним доступ из метода. Как такое можно сделать? |
(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); |
На сколько я понимаю, такой вариант создаёт переменные видимости всего плагина, верно? А хотелось бы чтобы были отдельные для каждого элемента, который попал под селект $(".my-plugin").my_plugin().
|
Тогда так:
(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); |
Спасибо.
Это первое что приходит в голову, но неудобно таскать все переменные. А чего-то более приближенному к раздению переменных объекта между методами как в классовых языках в нет? |
Просто в реальности у меня с десяток этих переменных.
|
Пересмотри структуру своего плагина. Например:
$.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(); }); }; |
Спасибо за наводку. В итоге сделал так
(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); |
Часовой пояс GMT +3, время: 20:12. |