0

私はたくさん検索しましたが、それでもわかりません。これが私がやりたいことをするための最良の方法です。私はjQueryプラグインを書いていますが、それはすでに機能していましたが、これを書いている間にもっと多くの関数を知るようになったので、今はコードを改善したいと思っています。

基礎として、私は公式のjQueryページhttp://docs.jquery.com/Plugins/Authoring(プラグインオプション)からコードを取得しました

jQueryのコードはすでに私の質問に十分なので、ここでは自分のコードを使用しません

(function( $ ){

  var methods = {
    init : function( options ) { 
      var defaults = {
        value1: '',
        value2: ''
       };
       var options = $.extend(defaults, options);
       return this.each(function(){
         value3 = $(this).parent();
       });
    },
    log : function( ) {
      console.log(value3);
      console.log(defaults.value1);
    }
  };

  $.fn.my_plugin = function( method ) {

    // Method calling logic
    if ( methods[method] ) {
      return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
    } else if ( typeof method === 'object' || ! method ) {
      return methods.init.apply( this, arguments );
    } else {
      $.error( 'Method ' +  method + ' does not exist on jQuery.tooltip' );
    }    

  };

})( jQuery );

これが私のプラグインの構造です。今は非常に剥ぎ取られています;)今私はこのような何かをしたいです:

$('#element1').my_plugin({value1 : 1, value2 : 2});
$('#element2').my_plugin({value1 : 3, value2 : 4});

今、私はコンソールに値を記録したいと思います(私が実際にやりたいこととは正確には異なりますが、私の質問ではそれで十分です)

さらにこのような機能を使いたい

$('#element1').my_plugin('log');
$('#element2').my_plugin('log');

これが私の最初の問題です。log関数にimがある場合、init関数から変数を取得するにはどうすればよいですか?それを行うための最良の方法は何ですか?

私は次のように値をグローバルに設定しようとしました:

(function( $ ){
  var defaults = {
    value1: '',
    value2: ''
  };
  var methods = {
    init : function( options ) { 
       return this.each(function(){
         value3 = $(this).parent();
       });
    },
    log : function( ) {
      console.log(value3);
      console.log(defaults.value1);
    }
  };

しかし、これを行って使用すると$('#element1').my_plugin('log');、2番目の初期化からのみデフォルトを取得します$('#element2').my_plugin({value1 : 3, value2 : 4});

それで、ここに私の2番目の質問があります:各initに特定の変数をどのように使用できますか?

私が知りたいことがはっきりしていることを願っています。私はまだjQueryを学び、最善を尽くして、この構造の問題を解決する方法をたくさん探しました。この構造を使用したいのは、これがjqueryの公式の構造であり、正しいことを行うのが大好きだからです:P

すぐにここでいくつかの答えを見たいです:)
助けてくれてありがとう、
ジュリアン

誰かが基本的なプラグイン構造に興味を持っている場合-これが私のプラグインに今使用しているものです:)

(function( $ ){

  var methods = {
    init : function( options ) {
        console.log('init');
      var defaults = {
        value1: '',
        value2: ''
      };
      var options = $.extend(defaults, options);        
      return this.each(function(){
                var $this = $(this);
        var data = $this.data('test');
        var parent = $this.parent();
        var element = $this;

        if (!data) {
            var data = {};
            $.each(options, function(key, value) {
                data[key] = value;
            });
            data["parent"] = parent;
            data["element"] = element;
                    $this.data('test', data);
        }

        $this.test('log');

       });
    },

    log : function() {
        console.log('log');
        return this.each(function(){
            var $this = $(this);
        var data = $this.data('test');
        console.log(data);
      });
    }
  };

  $.fn.test = function( method ) {
    if ( methods[method] ) {
      return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
    } else if ( typeof method === 'object' || ! method ) {
      return methods.init.apply( this, arguments );
    } else {
      $.error( 'Method ' +  method + ' does not exist on jQuery.test' );
    }    
  };
})( jQuery );
4

1 に答える 1

0

「これ」をクリーンに保ちたい場合は、$。dataを使用してください。

于 2012-07-10T15:54:03.183 に答える