2012-02-21 99 views
0

如果我遵循plugin authoring guide,如何從公共方法調用私有方法,反之亦然?調用插件方法

我通常聲明init方法像內的私有方法:

var methods = { 
    init: function(options) { 
     var settings = $.extend({ 
     }, options); 

     return this.each(function() { 
      var $this = $(this); 
      var data = $this.data('griffin-editor'); 


      this.trimSpaceInSelection = function() { 
       //how do I call a public method here? 
       //to get the this context correct. 
      } 

      if (typeof data !== 'undefined') { 
       return this; 
      } 

      //the rest of the code. 

這可能是不正確的事是什麼?

+0

爲什麼它與插件指南有什麼不同?這可能會幫助http://stackoverflow.com/questions/6420825/call-private-method-from-public-method – elclanrs 2012-02-21 07:34:46

+0

@elclanrs:看到我的更新。 – jgauffin 2012-02-21 07:47:15

+0

我明白了......我正在找東西。這些可能有所幫助,[1](http://stefangabos.ro/jquery/jquery-plugin-boilerplate-revisited/),[2](http://stackoverflow.com/questions/2061501/jquery-plugin-design- pattern-common-practice-for-dealing-with-private-functio),[3](http://www.virgentech.com/blog/2009/10/building-object-oriented-jquery-plugin.html) – elclanrs 2012-02-21 08:07:23

回答

1

如果「這種情況下正確的」你的意思是你要調用此設置一些公共的方法來值,這有內部trimSpaceInSelection那麼你可以做這樣的:

.... 
this.trimSpaceInSelection = function() { 
    methods.somePublicMethod.apply(this, arguments); // this will pass all arguments passed to trimSpaceInSelection to somePublicMethod 
} 
.... 

,如果你想設置這裏面公開的方法到當前的jQuery集合然後:

.... 
this.trimSpaceInSelection = function() { 
    methods.somePublicMethod.apply($this, arguments); // this will pass all arguments passed to trimSpaceInSelection to somePublicMethod 
} 
.... 
+0

奇蹟般有效。謝謝。我這樣做來創建args數組:'var args = []; args [0] = actionName;'有沒有更好的方法來做到這一點? – jgauffin 2012-02-21 11:16:23

+0

您可以顯示完整的代碼嗎?把它放在jsfiddle.net上? – 2012-02-21 11:58:42

+0

我只是聲明,在你的例子中調用'methods.somePublicMethod.apply($ this,arguments);'之前。 – jgauffin 2012-02-21 12:02:45