2012-09-18 92 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();