Jquery - доступ ко всем экземплярам плагина
Я разрабатываю плагин jquery "myPlugin
"Кто делает некоторые графические вещи. Это работает хорошо, и я рад этому.
(function ( $ ) {
$.fn.myPlugin = function(params) {
/* some code */
$(this).focus(function() {
/* draw things */
});
};
}( jQuery ));
Я называю это так: $("#foo").myPlugin();
Все работает хорошо: каждый раз, когда элемент получает фокус, плагин срабатывает, рисуя некоторые интересные вещи. Плагин содержит приватную функцию end
что я могу в конечном итоге получить доступ извне через функцию close
(function ( $ ) {
$.fn.myPlugin = function(params) {
/* some code */
$(this).focus(function() {
/* draw things */
});
function end(){
/* destroy the draw */
}
return{
close: function() { end(); }
}
};
}( jQuery ));
Эта функция позволяет мне закрыть плагин "извне".
var bar = $("#foo").myPlugin(); // create the graphic
bar.close(); // destroy the graphic for this element
Все по-прежнему работает хорошо! Но теперь у меня есть проблема: я хотел бы получить доступ ко всем плагинам. Допустим, мне нужно создать случайное число:
var bar1 = $("#foo1").myPlugin();
var bar2 = $("#foo2").myPlugin();
var bar3 = $("#foo3").myPlugin();
Мне бы хотелось, чтобы, когда элемент получил фокус (и начал рисовать), он уничтожил все остальные существующие:
когда:
$("#foo1").focus(); // make the draw
это тоже:
bar2.close(); // destroy an eventual draw of #foo2
bar3.close(); // destroy an eventual draw of #foo3
И вот... я заблокирован. Как получить доступ ко всему происходящему из моего плагина? Я думал сохранить где-нибудь все имена переменных (bar1, bar2, bar3, ...), чтобы получить к ним доступ, но я не могу получить их через плагин. Или в конце концов создайте второй промежуточный плагин, который запустит myPlugin
и хранить имена... Я в замешательстве. Есть идеи?
Ура <3
1 ответ
You can do something like this
(function ( $ ) {
$.fn.myPlugin = function(params) {
/* some code */
$(this).focus(function() {
//clear previous things
$('.myplugin').parent().remove()// or remove your markings
//append
$(this).append('<div class=".myplugin"></div>')
/* draw things */
});
function end(){
/* destroy the draw */
}
return{
close: function() { end(); }
}
};
}( jQuery ));
Очистите все такие родители или маркеры div, когда вы сосредоточитесь, добавьте временный div к идентификатору вашего плагина.