0

jQuery プラグインの作成方法をよりよく理解しようとしており、http://docs.jquery.com/Plugins/Authoringに基づいて理解しています。私は最後にいて、名前空間とデータについて混乱しています。

まず(以下のコードの QUESTION 1 を参照): チュートリアルでは、ターゲット ( $this) とツールチップの両方がオブジェクト リテラルに格納されていることが示されています。

  1. これらの特定の変数を保存する利点は何ですか?
  2. デフォルト値とカスタム オプションがあった場合、結果の設定オブジェクトを保存するのに適した場所でしょうか?

$(this).data('tooltip',{target:$this,tooltip:tooltip});また、代わりに彼らがした理由はあり$this.data('tooltip',{target:$this,tooltip:tooltip});ますか?

2 つ目(以下のコードの質問 2 を参照): チュートリアルでは、プラグインを破棄する方法を示しています。わかります$this.removeData('tooltip');が、何をするのdata.tooltip.remove();ですか?

ソース: http://docs.jquery.com/Plugins/Authoring#Data

(function( $ ){

  var methods = {
     init : function( options ) {

       return this.each(function(){

         var $this = $(this),
             data = $this.data('tooltip'),
             tooltip = $('<div />', {
               text : $this.attr('title')
             });

         // If the plugin hasn't been initialized yet
         if ( ! data ) {

           /*
             Do more setup stuff here
           */

           //QUESTION 1
           $(this).data('tooltip', {
               target : $this,
               tooltip : tooltip
           });

         }
       });
     },
     destroy : function( ) {

       return this.each(function(){

         var $this = $(this),
             data = $this.data('tooltip');

         // Namespacing FTW
         $(window).unbind('.tooltip');

         QUESTION 2
         data.tooltip.remove();
         $this.removeData('tooltip');

       })

     },
     reposition : function( ) { // ... },
     show : function( ) { // ... },
     hide : function( ) { // ... },
     update : function( content ) { // ...}
  };

  $.fn.tooltip = 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.tooltip' );
    }    

  };

})( jQuery );
4

1 に答える 1

1

これらの特定の変数を保存することの利点は何ですか?

オブジェクトに格納されている変数は、data呼び出されると他のメソッドで使用できるようになります。

  • ターゲット:私はこのプラグインパターンを使用しましたが、保存する必要があるとは思っていませんtarget:$this。ただし、場合によっては$(this).data、複雑なプラグインメソッド内を渡すと便利な場合があります。data.target元の状態に戻ることを可能にしながら、これを行う自由を与えます$(this)。他にも理由があるかもしれませんが、私はそれらを知りません。

  • ツールチップ:間違いなく他の方法で使用する必要があります。たとえば、を参照してください。destroyメソッド。

    デフォルト値とカスタムオプションがある場合、これは結果の設定オブジェクトを保存するのに適した場所でしょうか?

はい、オブジェクトsettingsに保存できdataます。オプションによって拡張されているかどうかに関係なく、他のメソッドが設定にアクセスする必要がある場合は、保存すると便利なことがよくあります。

また、彼らがやった理由はあり$(this).data('tooltip',{target:$this, tooltip:tooltip});ます$this.data('tooltip',{target:$this,tooltip:tooltip});か?

いいえ、理由はありません。$thisは明らかに範囲内であり、再ラッピングよりも優先して使用する方が効率的thisです。

2番目(以下のコードの質問2を参照):チュートリアルは、プラグインを破棄する方法を示しています。取得$this.removeData('tooltip');しますが、data.tooltip.remove();を実行する意味は何ですか?

data.tooltip.remove();動的に生成され<div />た要素をDOMから削除します。削除されなかった場合、ツールチップは完全に破壊されません。

于 2012-10-26T02:16:57.250 に答える