JQuery: плагин взаимодействия - PullRequest
2 голосов
/ 07 мая 2010

Вот проблема: У меня есть очень сложный плагин , который выполняет много разных инициализаций и привязок при его выполнении.

Я хочу иметь возможность запускать один и тот же плагин несколько раз для одного и того же элемента, предоставляя ему разные опции. После того, как он запускается один раз на элементе, определенную инициализацию не нужно повторять при последующих выполнениях этого элемента.

В настоящее время код плагина находится внутри замыкания, и он ничего не знает о других случаях, когда этот же плагин работал на элементе.

Есть ли шаблон , которому люди следуют, когда им нужно взаимное общение?

Я думаю о чем-то вроде этого:

$.plugin = {
   globalRefs = [];
}
$.fn.plugin = function() {
  var that = {};
  $.fn.plugin.id ++; //each execution gets its unique id

  var privateFn = function() { ... };

  that.privateFn = privateFn; //expose all useful inner functions to that.

  $.plugin.globalRefs[$.fn.plugin.id] = that; //make that global 
} 
$.fn.plugin.id = 0;

1 Ответ

3 голосов
/ 07 мая 2010

Вы говорите о "других плагинах", но не ясно, что вы подразумеваете под этим;какие еще плагины?Что им нужно «знать» друг о друге?

Если вы просто хотите поддерживать состояние, почему бы просто не использовать механизм jQuery data() для хранения всего, что вам нужно, прямо на целевых элементах DOM?Это позволило бы вашему плагину узнать о предыдущих вызовах, а также позволило бы этим загадочным «другим плагинам» использовать и эти сохраненные данные.

// ...
$(theElement).data('pluginName', { 'fabulous': 'data' });

Данные, которые вы храните с помощью этого механизма, могут быть любымикак:

$(theElement).data('pluginName', {
  'aNumber': 23.5,
  'anArray': ['hello', 'world'],
  'aFunction': function(arg) {
    alert("wow a function! Here is the argument: " + arg);
  }
  'anObject': {
    'more': 'stuff'
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...