代码之家  ›  专栏  ›  技术社区  ›  mkoryak

jquery:插件内部通信

  •  2
  • mkoryak  · 技术社区  · 14 年前

    问题是: 我有一个 very complex plugin 它在执行时执行许多不同的初始化和绑定。

    我想能够在同一个元素上运行同一个插件多次,给它不同的选项。在元素上运行一次之后,在该元素的后续执行中不需要再次执行某些初始化。

    当前插件代码在闭包中,它不知道同一个插件在元素上运行的其他时间。

    有没有 图案 当人们想要相互交流的时候,他们就跟着?

    我在想这样的事情:

    $.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 回复  |  直到 14 年前
        1
  •  3
  •   Pointy    14 年前

    你说的是“其他插件”,但还不清楚你说的是什么意思;还有哪些插件?他们需要“了解”对方什么?

    如果您只想维护状态,为什么不直接使用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'
      }
    });