2011-06-27 6 views
0

過去にかなりのjQueryプラグインを作成しましたが、この問題は数回発生しました。通常は、クロージャの外側にグローバル変数を作成し、それを1日と呼びます。今回私はそれを行う正しい方法が何であるか把握しようとしています。jqueryプラグインで要素を1回作成する

だからここで取り上げる。私は私のベースは、このようなセットアッププラグインがあります:私はどこでも1から実行することができthis.eachセレクタリターンとしてクラスを使用しておりますので

$('.class').nameOfPlugin({foo:'bar'});

(function($) { 
    $.fn.nameOfPlugin = function(options) { 
    var defaults = { 
     foo: 'foo' 
    } 
    var opts = $.extend(defaults, options); 

    return this.each(function(){ 
     //if first time through call create 
    }); 
    }; 

    function create() { 
    //create stuff here only once 
    $('body').append("<div id='plugin_overlay'></div>"); 
    }; 

})(jQuery);

と明らかにし、私はこのようにそれをinitateう〜50回。セレクタごとに1回だけcreateメソッドを実行する最善の方法は何ですか?

この状況では、私は単に

$('#plugin_overlay').length > 0
をチェックできますが、セレクタに基づいて固有のIDにタイムスタンプを追加します。

私はできることにいくつかのアイデアを持っています。私はこれを行うための最善の方法を考えています。

+2

私は通常、それは '.dataのに添付する()'要素のが、その後のことを確認してください。それに欠点があるかどうかは分かりませんが、いつもかなり簡単です。 – Robert

+0

オブジェクトに変数を追加し、create(create関数自体ではなくプラグインにグローバル)によって生成された新しいオブジェクトを格納します。次に、必要なときに、その変数を再参照します(または、初期化されていないときに作成します)。 [私が誤解していない限り] –

+0

@robertええ、私もそれをやっています。そしてええ、私はそれを試してみましょう – locrizak

答えて

1

私はこの質問を完全に誤解しているかもしれませんが、セレクタごとにメソッドを1回だけ呼び出す場合は、それぞれのメソッドの前にコールするのはなぜですか?

create(); 

return this.each(function(){ 
    ... 
}); 

代わりに、各関数に渡されるインデックスパラメータを使用することができます

return this.each(function(i){ 
    if(i==0) create(); 
    ... 
}); 
+0

うわー、私はダムです。私は戻り値に焦点を当てました。私は実際に手前にメソッドを呼び出すことができたことを忘れていました。最初は正確に私が探していたものでした。ありがとう – locrizak

関連する問題