0

動的データをラファエル円グラフに入れたい。javascriptコードのwindow.onload()の外に次のコードを書くことができません。誰かがラパハエル円グラフに動的データを追加しましたか?これは私の現在のコードです:

<script language="javascript" type="text/javascript">
    window.onload = function () {
        var r = Raphael("holder");
        r.g.txtattr.font = "12px 'Fontin Sans', Fontin-Sans, sans-serif";
        r.g.text(320, 100, "Interactive Pie Chart").attr({"font-size": 20});
        var pie = r.g.piechart(320, 240, 100, [55, 20, 13, 32, 5, 1, 2], {legend: ["%%.%%" , "%%.%%","%%.%%"], legendpos: "west"});
    }
</script>

この55、20、13、32、5、1、2のデータを使用して、データベースから返されたデータをJSPページに書き込みます。どうすれば追加できますか?私はデータを持っています

<c:forEach var="Detail" items="${DetailRow.List.}">'${Detail.Text}',${Detail.Count}</c:forE­ach>

${Detail.Text}',${Detail.Count}円グラフに追加したい。どうすれば変換でき([[],[]..])ますか?

4

2 に答える 2

0

これが私のやり方です。ASP.Net MVCを使用していますが、任意のフレームワークまたは言語を使用できます。

値、legendvalues、sectorLinkValuesは、ページで作成された.NetListオブジェクトです。

%>
<script type="text/javascript">
    $(document).ready(function () {
        <% =truViewPOC.Helpers.GraphaelChartHelper.GetJavaScript(100, 150, 90, title, values, legendValues, sectorLinkValues, null) %>
     });

そして、これが私のGetJavaScriptメソッドです。

StringBuilder javaScriptBuilder = new StringBuilder();
javaScriptBuilder.Append("window.onload = function () {var r = Raphael('holder');");
AppendCenterCoordinates(ref javaScriptBuilder);

AppendLegendInfo(ref javaScriptBuilder, title);
AppendPieChartInfo(ref javaScriptBuilder, xCoord, YCoord,radius, values, legendValues,sectorLinkValues);
AppendFunctionInfo(ref javaScriptBuilder);
javaScriptBuilder.Append("}");

private static void AppendFunctionInfo(ref StringBuilder javaScriptBuilder)
        {
            javaScriptBuilder.Append("pie.hover(function () {this.sector.stop();this.sector.scale(1.1, 1.1, this.cx, this.cy);if (this.label) {this.label[0].stop();this.label[0].scale(1.5);this.label[1].attr({ 'font-weight': 800 });}}, function () {this.sector.animate({ scale: [1, 1, this.cx, this.cy] }, 500, 'bounce');if (this.label) {this.label[0].animate({ scale: 1 }, 500, 'bounce');this.label[1].attr({ 'font-weight': 400 });}}); ");
            javaScriptBuilder.Append("pie.each(function(){ this.sector.label=this.sector.value;   })");
        }
        private static void AppendPieChartInfo(ref StringBuilder javaScriptBuilder, int xCoord, int YCoord, int radius, List<decimal> values, List<string> legendValues, List<string> sectorLinkValues)
        {
            javaScriptBuilder.AppendFormat("var pie = r.g.piechart({0},{1},{2},{3},", xCoord, YCoord, radius, ConvertValuesToString(values));
            javaScriptBuilder.Append("{");
            javaScriptBuilder.AppendFormat("legend: {0}, legendpos: 'east', href:{1}",ConvertValuesToString(legendValues),ConvertValuesToString(sectorLinkValues));
            javaScriptBuilder.Append("});");
        }

private static void AppendLegendInfo(ref StringBuilder javaScriptBuilder, string title)
        {
            javaScriptBuilder.Append("r.g.text(140, 24, " + "'" + title +  "'" + ").attr({ 'font-size': 16 });");
        }

 private static string ConvertValuesToString(List<decimal> values)
        {
            string finalString = "[";


            for (int i = 0; i < values.Count; i++)
            {
                finalString += values[i].ToString();
                if (i<values.Count-1)
                {
                     finalString+= ",";
                }


            }
            finalString += "]";
            return finalString;

これがお役に立てば幸いです。このコードについて質問がある場合はお知らせください。ありがとう。Vikas}

于 2011-04-25T18:50:35.780 に答える
0

キラン、

私があなたをよく理解していれば、あなたは次のようなことをしたいと思うでしょう:

window.onload = function () {
  var r = Raphael("holder"),
  mydata = //AJAX call to get data from Database
  //Parse mydata to have the format you need ([[],[]..])...
  r.g.piechart(320, 240, 100,mydata);
}; 

質問にいくつかのコードを表示できれば、それはいいでしょう:)。しかし、私が信じているのは、データベースからデータを取得できるスクリプトへの AJAX 呼び出しを行うということです。

于 2011-04-14T08:19:22.343 に答える