我有一个控制器,其动作看起来像这样
def createGraph(){
def dailyProfit = DailyProfit.list()
//loop through the data and parse
//render graph
}
我需要解析所提取的数据并在 google chart plugin 中使用它。
我如何能够遍历所有值然后将数据传递给视图?
答案 0 :(得分:1)
为什么不将您的数据集传递给GSP,如:
def chart(){
def dataset = DailyProfit.list()
[dataset: dataset]
}
然后是GSP中的每个列表数据集:
<html>
<head>
<script type="text/javascript"
src="https://www.google.com/jsapi?autoload={
'modules':[{
'name':'visualization',
'version':'1',
'packages':['corechart']
}]
}">
</script>
<script type="text/javascript">
google.setOnLoadCallback(drawChart);
function drawChart() {
var data = google.visualization.arrayToDataTable([
['time', 'sales'],
<g:each in="${dataset}" var="row" status="i">['${row.time}', ${row.sales}],</g:each>
]);
var options = {
title: 'Company Performance',
curveType: 'function',
legend: { position: 'bottom' }
};
var chart = new google.visualization.LineChart(document.getElementById ('curve_chart'));
chart.draw(data, options);
}
</script>
</head>
<body>
<div id="curve_chart" style="width: 900px; height: 500px"></div>
</body>
</html>
https://developers.google.com/chart/interactive/docs/gallery/linechart
答案 1 :(得分:0)
假设DailyProfit.list()返回一个Collection。如果是这样,你可以使用“each”和一个闭包轻松地循环它: 在下面的示例中,我将使用“list”方法获取数据列表,然后我将解析它们并将其放入一个新列表中,我将在视图中呈现:
def createGraph(){
def dailyProfit = DailyProfit.list()
def parsedDatas = []
//looping and parsing
dailyProfit.each
{
def parsedObject = Toolbox.verifyAndParse(it) //returns a parsedObject
parsedDatas.add(parsedObject)
}
//Rendering
render(view : "/domain/myView", model:[listProducts: listProducts])
}
当使用“each”和闭包时,“it”表示你在集合中看到的特定实例。
答案 2 :(得分:0)
您想使用collect()
代替each()
:
def createGraph(){
def dailyProfit = DailyProfit.list().collect{ [ chartA:it.a + it.b, chartB:it.c ] }
render dailyProfit as JSON
}