Как делать доступ к переменным из функций?
Всем привет!
Я делаю плагин на 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, время: 05:38. |