2017-03-20 12 views
2

新しいdaterangeでChartJsを更新するには、同じパラメータの値を持つ関数を呼び出す必要があります。javacriptで同じパラメータ値を持つ関数を呼び出す

_reportDateStartと_reportDateEndは関数の外部で更新されるため、グラフを新しいデータで更新するように関数を呼び出す必要があります。

スクリプトは次のとおりです。

var _reportDateStart; 
var _reportDateEnd; 

var _loadChart = function (chartLabel, queryMetrics, queryDimensions) {} 

コールは次のように構成されています

_loadChart("Visits", "ga:sessions", "ga:date,ga:nthDay"); 

しかし、また使用できます

_loadChart("Users", "ga:users", "ga:date,ga:nthDay"); 
+0

は、もう一度同じ引数を渡すからあなたを妨げるものがありますか? –

+0

こんにちは、ありがとう!はい、私はちょうどこれで質問を更新していました。 – Patrick

+0

このアップデートでは、同じ引数を使用できない理由について説明していません。 –

答えて

2

グローバルにアクセス可能な変数を宣言し、上のパラメータを割り当てますあなたはそれらの変数を使って関数をもう一度呼び出すことができます: 試験PLE:

var param1,param2,param3; 
var _loadChart = function(a, b, c){ 
    param1 = a; 
    param2 = b; 
    param3 = c; 
    //rest of the code. 
}; 

function callTheFunctionAgain(){ 
    _loadChart(a, b, c); 
} 
_loadChart("Visits", "ga:sessions", "ga:date,ga:nthDay"); 
callTheFunctionAgain(); 
+0

こんにちは、ありがとう!関数の外にパラメータを設定せずに_loadChartを再度呼び出す方法はありますか? – Patrick

+0

いいえ私はそうは思わない、それらのパラメータで関数を再度呼び出す予定がある場合は、どこかにパラメータを格納する必要があります。 関数自体を再度呼び出す場合は、変数をどこにでも格納する必要はありません。単に_loadChart(chartLabel、queryMetrics、queryDimensions)を呼び出します。しかし、それはあなた自身の中からそれを呼び出す場合にのみ適用できます。 –

1

あなたは、このvar _loadChartBounded = _loadChart.bind(null, "Visits", "ga:sessions", "ga:date,ga:nthDay")

ようにあなたはそれが我々が既に持っている

+0

こんにちは、ありがとう!そして、元の関数_loadChartをどのように宣言しますか? – Patrick

+0

あなたのコードで行ったのと同じ方法で、私のコードはそこから伸びます –

+0

そしてそれはすべてのブラウザで動作しますか? – Patrick

0

同じのparamを取得します_loadChartBounded()呼び出すたびに望むようにあなたがバウンドのparamで新しい関数を作成できます。これを行うにはグローバル変数と.bind()
私はクロージャを使用する別の解決策を投げます

これらの仕組みの説明については、頭以上、この質問には、その優れた答え:
How do JavaScript closures work?

// This is only an example. 
 
// Please change the variable names to something more meaningful :) 
 

 
var _loadContent = (function() { 
 
    var _a, _b, _c; 
 

 
    return function(a, b, c) { 
 
    if (typeof _a === "undefined") { 
 
     _a = a; 
 
     _b = b; 
 
     _c = c; 
 
    } 
 

 
    console.log(_a, _b, _c); 
 
    } 
 
}()); 
 

 
_loadContent(1, 2, 3); 
 
_loadContent(4, 5, 6); 
 
_loadContent();

+0

こんにちは、ありがとう!バインドソリューションはより簡単に実装できるようです。 – Patrick

+0

_ "> = IE9" _コメントのために追加しました。これはIE6でも動作します – Andreas

+0
関連する問題