2012-04-17 7 views
1

jQueryの[プラグイン/オーサリング] [1]ドキュメントを見ると、いくつか質問があります。私がすべきドキュメントによるとjQuery Plugin Skeleton

$('#one').plug({foo:'bar'}); 
$('#two').plug(); 

:私は、私は次の操作を行うことができますプラグインを作成する必要が

(function($){ 

    var settings = { 
     foo:'' 
    }; 
    var methods = { 
     init:function(options){ 
      return this.each(function(){ 
       $.extend(settings, options); 

       //------ Problem ----------// 
       alert(settings.foo); 

      }); 
     } 
    }; 
    $.fn.plug = function(method){ 
     //... 
    } 

})(jQuery); 

問題:$('#one').plug({foo:'bar'});アラート「バー」予想としてではなく、次の行にはありません空の文字列を返すと、 "bar"も返されます。

+0

設定のobjはあなたのアドオンの範囲にありません。あなたがJS Consoleに行き、設定を入力すれば、それを得るべきです。あなたは本当にすべきではありません。マニュアルを正しく読んでください。または、しばらく設定をリセットする必要があります。 – xotix

+0

プラグインインスタンスのローカル値を必要とし、ユーザーのデフォルト設定で 'init'メソッドで設定し、プラグインインスタンスの他のメソッドでアクセス可能な場合はどうすればよいですか? – Siavash

+0

アドオンの範囲外でvvariableを使用したい場合は、それを正しく実行します。あなたが 'bar'をもう一度得る理由は、最後の呼び出しから保存されるためです。設定はアドオン内にないので、リセットされません(単純に言えば)。だからあなたは設定= '';またはあなたのアドオンの先頭に似たようなものや、あなたのアドオン内であなたのvarを作る。私はJSに亀裂がないので、freenodeサーバー(irc)に#jqueryで質問するかもしれないので、freenodeのWebチャットがあります。 – xotix

答えて

1

私はこれを同じ質問のある人に転記してください。 jQueryプラグインを作成する方法はたくさんあります。私が頻繁に使用するのは、このスケルトンです。

(function($, window, document, undefined){ 

    function Skeleton(element, options){ 
     this.$element = $(element); 
     this.options = options; 

     // Plugin init goes here... 

    } 

    Skeleton.prototype = { 
     // Plugin methods 
     sampleMethod: function(){ 
      // ... 
     } 

    }; 
    // Plugin Definition // 
    $.fn.skeleton = function(options){ 
     if(typeof options == 'string'){ 
      var plugin = this.data('skeleton'); 
      if(plugin){ 
       var r = plugin[options].apply(plugin, Array.prototype.slice.call(arguments, 1)); 
       if(r) return r 
      } 
      return this 
     } 

     options = $.extend({}, $.fn.skeleton.defaults, options); 

     return this.each(function(){ 
      var plugin = $.data(this, 'skeleton'); 
      if(! plugin){ 
       plugin = new Skeleton(this, options); 
       $.data(this, 'skeleton', plugin); 
      } 
     }); 
    }; 
    $.fn.skeleton.defaults = { 
     // Plugin options ... 
    }; 

})(jQuery, window, document); 
+0

偉大なスケルトンですが、最後にデフォルトのオプションを空にする必要があります: > plugin = new CollapsiblePanel(this、$ .extend({}、options)); – Echilon