2015-06-19 6 views
1

Я часами работаю над написанием плагина jQuery, читаю документацию, просматриваю сообщения и т. Д. Пока еще не ясно. Я пишу плагин с несколькими экземплярами, так что у меня есть что-то вроде этогоНапишите плагин jQuery: общедоступные методы и несколько экземпляров плагина

<div id="box1" class="box"></div> 
<div id="box2" class="box"></div> 

<script type="text/javascript"> 
    $(".box").myPlugin(); 
</script> 

Так что плагин будет действовать на двух элементах DOM. Вот демо-версия плагина. Предположим, что мне нужна одна или несколько частных переменных (myValue в демонстрации), конечно, любой экземпляр (box1, box2) имеет разные значения.

(function ($) { 

    $.fn.myPlugin = function() { 

     this.each(function() { 

      /* this is a private variable */ 
      var myValue = Math.floor(Math.random() * 10000); 
     }); 

     return this; 
    }; 

    /* this is a public method */ 
    $.fn.myPlugin.showValue = function() { 
     alert('My value is ' + myValue); 
    }; 

}(jQuery)); 

Теперь мне нужен этот плагин, чтобы открыть один общедоступный метод для чтения/записи такой частной переменной. Приведенный выше код завершится с ошибкой «myValue is undefined», конечно.

Мне нужно каким-то образом получить ссылку на любой экземпляр, а затем вызвать «их» общедоступный метод. Что-то вроде

$ ('# box2'). ShowValue()/* ??? */

Любая помощь будет оценена. Спасибо.

+0

Посмотрите на: http://learn.jquery.com/plugins/basic-plugin-creation/ –

ответ

1

К сожалению, нет простого способа сделать ваш пример работы без простого определения дополнительных «плагинов» на $.fn namespace.

Обычно методы плагин реализованы либо в качестве аргументов передаются в плагин:

$("foo").myPlugin(); // initialize 
$("foo").myPlugin("doSomething"); // do something 

или имея «экземпляр» объект доступный:

$("foo").myPlugin(); // initialize 
var inst = $("foo").data("myPlugin"); // get instance 
inst.doSomething(); // do something 

Пример первого варианта можно найти здесь: http://learn.jquery.com/plugins/basic-plugin-creation/

+0

Итак, моим примером будет (функция ($) {$ .fn.myPlugin = функция (действие) { \t this.each (функция (действие) { \t \t/* это частная переменная */ \t \t вар myValue = Math.floor (Math.random() * 10000); \t \t \t \t если (действие === 'шоу') { \t \t \t оповещения ('Моя значение' + MyValue); \t \t} }); \t \t вернуть это; }; } (jQuery)); Но это правильно? Разве код плагина не называется 4 раза (дважды в коробке), insteand из 2? – user2029958

+0

Это правильно, вам нужно будет закодировать плагин с учетом этого факта. –

Смежные вопросы