2011-06-29 9 views
0

JavaScriptに動的にハンドラを登録する方法はありますか?私はこれが意味をなさないと思うので、ここで私がやろうとしていることがあります。JavaScriptでパラメータ名を渡す方法は?

私はWebアプリケーションでグラフを生成するのにJQuery Flotを使用しています。私は同じページに2つのグラフがあるまで、すべてうまく動作します。

データベースからc#を使用してデータを取得し、JavaScript配列に変換してこのようなページに書き込みます。

HTML/C番号:JavaScriptから

if ($(".PerformanceGraph")) { 
     $(".PerformanceGraph").livequery(function() { 
      //Display the graph for risk and reward. 
      var options = { series: { 
       bars: { show: true, barWidth: 0.45, align: "center" } 
      }, 
       legend: { 
        show: true, position: "ne", backgroundOpacity: 0, container: $("#PerformanceGraphLegend") 
       }, 
       multiplebars: true 
      }; 


      var dataArray = $(this).attr('data-array');//I get the name of the variable as String. 
      $.plot($(".PerformanceGraph"), pgdata, options); 
     }); 
    } 

pgdata HTML /から"var pgdata"+Model.Id+"と一致する必要があります。そして、

@{ 
     KII.Models.JsonPerformGraphData items = new KII.Models.JsonPerformGraphData(); 

     foreach (KII.Models.PerformanceGraphItem item in Model.PerformanceGraphItems) 
     { 
      items.Add(item); 
     } 

     <script type="text/javascript"> 

     @Html.Raw("var pgdata"+Model.Id+" = ") @Html.Raw(items.toJson()) ; 

     </script> 
    } 

、私はグラフ

JavaScriptを描画する準備ができて、ドキュメントのメソッドを呼び出しますC#。

HTML/C#コードがHTMLに吐き出す変数を取得するにはどうすればよいですか?

+1

ではなく、あなたのようなだけの出力なものではないだろうか? 'plotMyJson({jsonからc#...});'そして 'plotMyJson'関数をjsで作成しますか? – Dogbert

答えて

1

変数名を連結し、それを "評価"することができます。

http://www.w3schools.com/jsref/jsref_eval.asp

+1

w3schools警察に警告してください! –

+1

Neee Narrr Neeee Narrr – CResults

+0

'$ .plot($(this)、eval(dataArray)、options);に変更されました。私はevalが悪いと考えられているのを見ます。 – Omar

1

なぜこのようなものはありませんか?

<script type="text/javascript"> 
var pgdata = {}; 
@Html.Raw("pgdata["+Model.Id+"] = ") @Html.Raw(items.toJson()) ; 
</script> 

、その後JavaScriptであなたは、単にPGDATA内のキーを反復:

for (k in pgdata) { 
    $.plot($(".PerformanceGraph"), pgdata[k], options); 
} 
+0

HTML/C#コードが複数回実行されます。私は 'var pgdata = {};'は、実行ごとに配列をクリアすると思います。 – Omar

+0

まだ、この一般的なアプローチはあなたが探しているものです。 pgdataをインスタンス化し、以前のどこかに代入するか、 'if(!( 'pgdata' in window)){pgdata = {}; } ' – digitalbath

関連する問題