2012-03-15 8 views
1

私はこのプラグインの問題を長年にわたって持っていますが、それは正しくできません。jqueryプラグインを再利用可能にする方法は?

ここにテストpageがあります。あなたはページボタンをクリックすると、それは二回pageを警告する必要がありますが、それはphotoに警告します。

これは、「写真」という別のボタンのプラグインを再利用するためです。私は2番目のボタンが最初のボタンを上書きしていると思います。なぜなら、それがなぜ起こっているのか分かりません。

$(document).ready(function(){ 

    $('.get-page').get_overlay({ 
     targetObject:   '.page' 
    }); 

    $('.get-photo').get_overlay({ 
     targetObject:   '.photo' 
    }); 

}); 

その後、これは、このプラグインが最初の場所でプラグインを持つ点が何であるか、その後全く再利用することができないことを意味?

私はこのプラグインで間違っていましたか?どうすれば修正できますか?代わりに、targetObjectを格納し、それを保存するために.dataを使用するローカル変数を使用しての

(function($){ 

    $.fn.get_overlay = function(options) { 

      var defaults = { 
       targetObject:   '' 
      } 

      var options = $.extend(defaults, options); 
      var o = options; 

      var $cm = this.click(function() { 

       alert(o.targetObject); 

       $.fn.get_overlay.centralise(); 

       return false; 



      }); 

      if(!$.fn.get_overlay.centralise) $.fn.get_overlay.centralise = {}; 

      $.fn.get_overlay.centralise = function() { 

       alert(o.targetObject); 

      } 

    }  
})(jQuery);​ 

答えて

2

@lauthiamkok、jquery docsのプラグインオーサリングガイドを改訂する必要があると思います。プラグインの中でこれを行うことはおそらく良い考えではありません。$.fn.get_overlay.centralise公開範囲からcentralise()にアクセスしたい場合は、それをメソッドにする必要があります。次に、オーサリング・ガイドがアドバイスするように、プラグインの連鎖を許可するためにjqueryオブジェクトを戻すことをお勧めします。答えをhttp://jsfiddle.net/elclanrs/FrMSY/1/

$.fn.get_overlay = function(options) { 

    var o = $.extend({ 
     targetObject: '' 
    }, options); 
    var $this = this; 

    $this.centralise = function() { 
     alert(o.targetObject); 
    }; 

    return this.each(function() { 
     $(this).click(function() { 
      alert(o.targetObject); 
      $this.centralise(); 
      return false; 
     }); 
    }); 

}; 
+0

この回答に感謝します、elclanrs。このフォーマットに従えば、公的な範囲から 'centralise'にアクセスするにはどうしたらいいですか? – laukok

+0

このように: '$ el.get_overlay()。centralize()' – elclanrs

+0

これは素晴らしいです!大好きです! – laukok

1

+0

おかげで
確認作業例。私はプラグインで 'data'を使用しませんか? – laukok

+0

@lauthiamkokそれを使用しない理由は何ですか? – xdazz

+0

私の返信で申し訳ありませんが入力ミス。私は前もって 'data'を使っておらず、それを使って情報を得る方法を知らない。 jQueryのウェブサイトで読んだことがありますが、プラグインでそれを使用する方法はまだ分かりません。あなたは例を挙げていただけますか?ありがとう。 – laukok

関連する問題