#javascript #html #jsp #pie-chart
#javascript #HTML #jsp #круговая диаграмма
Вопрос:
Я хочу поместить свои динамические данные в круговую диаграмму Рафаэля. Я не могу написать следующий код вне window.onload() моего кода javascript. Кто-нибудь добавлял динамические данные в круговую диаграмму рапахаэля? Это мой текущий код:
<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:forEach>
Я хочу добавить ${Detail.Text}',${Detail.Count}
в круговую диаграмму. Как я могу преобразовать это в ([[],[]..])
?
Комментарии:
1. я не могу добавить свои динамические данные в круговую диаграмму Graphael. следующий код не работает, когда я писал его вне window.onload() . <язык скрипта=»javascript» тип=»text/javascript»> var pie = r.g.piechart(320, 240, 100, [55, 20, 13, 32, 5, 1, 2, 10], { легенда: [«%%.%%» , «%%.%%»,»%%.%%»], legendpos: «запад»}); </script>
2. Ваш вопрос мне пока кажется ясным.
3. @kiran: Объясните, что вы подразумеваете под динамическими данными, и, если возможно, напишите больше кода в своем вопросе.
4. @Nobita : Это мой текущий код <язык сценария= «javascript», тип =»текст / javascript»> window.onload = function () { var r = Raphael(«держатель»); например,txtattr. font = «12px ‘Шрифт без’, шрифт без засечек»; r.g.текст (320, 100, «Интерактивная круговая диаграмма»).attr({«размер шрифта»: 20}); var pie = r.g.точечная диаграмма(320, 240, 100, [55, 20, 13, 32, 5, 1, 2], { легенда: [«%%.%%» , «%%.%%»,»%%.%%»], legendpos: «запад»}); } </script> Вместо этого 55, 20, 13, 32, 5, 1, 2 данные я хочу записать свои данные, возвращенные из базы данных, на моей странице jsp. как я могу это добавить
5. я видел что-то вроде этого var labels = []; var values = []; для (i в data.items) { var item = data.items[i]; labels.push(item.label); values.push(item.data); } var pie = r.g.piechart(320, 240, 100, значения, {legend: метки, legendpos: «запад»});. какой массив используется здесь (data.tems), который я хочу вставить мои данные в массив data[]
Ответ №1:
Вот как я это делаю. Я использую ASP.Net MVC, но вы можете использовать любой фреймворк или язык.
значения, legendvalues и sectorlink являются .На странице создан объект Net List.
%>
<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;
Надеюсь, это поможет..Дайте мне знать, если у вас возникнут какие-либо вопросы по поводу этого кода. Спасибо. Викас
}
Ответ №2:
Киран,
Если я вас правильно понял, вы хотите сделать что-то вроде этого:
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-вызов скрипта, который может получать данные из базы данных.
Комментарии:
1. да, это то, чего я не хочу, у меня есть данные <c: forEach var=»Detail» items=»${DetailRow.List.}»>’${Detail. Текст}’,${Подробно. Count}</c:forEach> я хочу добавить ${Detail. Текст}’,${Подробно. Количество} в круговую диаграмму? как я могу преобразовать ее в не ([[],[]..]) этот формат?
2. @kiran: Пожалуйста, разместите этот код в основном вопросе. Это поможет не только вам, но и всему сообществу.