2012-01-10 10 views
1

私のプラグインの問題は、var chartに公開され、連鎖性を維持する必要があるということです。どのように私はこれを達成することができますか?これは私が書いた最初のプラグインであり、連鎖可能性が本当に重要なのかどうかは分かりません。ありがとう。連鎖性を維持しながらjQueryプラグインでjavascript変数を公開しますか?

のHTML片

<div id="chart1" class="chart"></div> 
<div id="chart2" class="chart"></div> 

プラグイン呼び出し

$("div").chart(); 

プラグイン定義

(function($) { 

    $.fn.chart = function(options) { 

     return this.each() // Maintain chainability 
     { 
      // Stuff, ajax call and then... 
      var chart = new Highcharts(options); 
      // Expose each chart variable for each container (<div>) 
     } 

    }; 

})(jQuery); 

EDIT:明確化約chartが追加されました。

+1

で正常に呼び出されます

$.fn.chart = function(options) { if(options=='get_charts') return charts; else { // Stuff, ajax call and then... var chart = new Highcharts(options); } } 

:: '$ .chart' –

+1

@

第二に、あなたはこのような何かを試すことができますJosephSilberいいえ、jQueryプラグインはプロトタイプ '$ .fn = jQuery.fn = jQuery.prototype'で定義する必要があります。 –

+0

@RobW - 私は彼が彼のプラグインをそこに付けるべきではないと言った - 彼はそれを正しくやっている。私は彼が**その変数を公開するべきであることを意味しました。彼の質問をもう一度読む。 –

答えて

1

まず、あなたがいない場合は、Plugins/Authoringを読んでください。そこにいくつかの良いアイデアがあります。あなたがメインのjQueryオブジェクトにアタッチする必要があります。これは、その後$('#something').charts({});または$('#something').charts('get_charts');

+0

追加情報と同様、 'else {}'は必要ありません。単にif(options == 'get_charts'){return charts}}を使用し、通常のコードの下に置きます。 'return'はすでにその関数を終了します(' if'がtrueを評価した場合)。 – RaphaelDDL

+1

真。純粋に文体的な決定です。メソッド本体の大部分が同じインデントにあるとき、私はそれが好きです。ブロックを特定し、フローをより簡単に制御するのに役立ちます。 – Jeff

関連する問題