2012-09-18 49 views
0

我已经在下面编写了一个jQuery插件,并且希望能够为元素上的同一实例再次调用它。调用jQuery插件的相同实例

插件去...

(function($) { 
    $.fn.myPlugin = function(options){ 

     var settings = { 
      color: null 
     }; 

     if (options) { 
      $.extend(settings, options); 
     } 

     return this.each(function(){ 
      var self = this; 
      var pics = $('li', self); 

      function refresh() { 
       pics = $('li', self); 
      }; 

      $('a', self).click(function(){ 
       pics.filter(':last').remove(); 
       alert(settings.color); 
       refresh(); 
       return false; 
      }); 
     }); 
    } 
})(jQuery); 

在这个被称为网页...

$('#test').myPlugin({ color: 'blue' }); 

现在我想呼吁相同的实例相同的插件,但把这个字符串refresh作为选项,而所有其他变量是相同的(所以颜色仍然是blue)例如..

$('#test').myPlugin('refresh'); 

然后这将执行refresh()函数。

我怎么能达到上述目的?

编辑:为了让它更清晰,我正在考虑jQuery UI如何做他们的插件。在sortable插件中,您可以在同一元素上执行$("#sortable").sortable();然后$("#sortable").sortable('refresh');。这是我想要实现的。

+0

click事件应该已经都需要......它没有做的,是参考? –

+0

忘记点击事件,那只是插件的一个例子。我基本上希望能够在同一个实例上调用刷新功能。 – fire

+1

正如Korvin所建议的,'.data()'是常见的做法,只需关闭jQuery对象并将其作为一个已命名的数据项存储在Object上即可。 Bootstrap为此提供了[很好的示例](http://twitter.github.com/bootstrap/javascript.html)。 例如,您也可以存储使用数据而不是整个闭包,[html5sortable](https://github.com/farhadi/html5sortable/blob/master/jquery.sortable.js#L16)。此外,您甚至可以将用于您控制的其他地方的值存储起来。 – okm

回答

1

您可以使用.data()存储您的实例,并在创建实例时检查它。

喜欢的东西:

$.fn.doStuff = function() { 
    var ob = $(this); 
    var data = ob.data(); 
    if (data.doStuff !== undefined) { 
    return data.doStuff; 
    } 
    doStuff; 
}); 
0
(function($) { 
$.fn.myPlugin = function(options){ 
    var init = function($self, ops){ 
     $self.find("a").click(function(){ 
      pics.filter(':last').remove(); 
      alert(settings.color); 
      refresh(); 
      return false; 
     }); 
    }; 

    this.refresh = function(){ 
     //your code here 
    }; 

    return this.each(function(){ 
     var self = this; 
     var pics = $('li', self); 
     var settings = { 
      color: null 
     };  

     var ops = $.extend(true, settings, options); 

     init($(this), ops);    

    }); 
} 
})(jQuery); 

尝试类似这样的事情。你可以调用refresh()像$()。myPlugin()。refresh();