Grails:gsp перезагрузить диаграмму Google не отображается

Меня попросили добавить диаграмму Google в наше текущее приложение Grails 2.1.0. Основной gsp (showdata.gsp) загружается и работает нормально, но когда данные обновляются функцией javascript, которая неоднократно вызывает второй gsp (reloadshowdata.gsp), диаграмма не отображается — другие перезагруженные данные обновляются и отображаются правильно. Оператор apiImport не распознается во втором gsp, как я могу отобразить диаграмму?

showdetails.gsp -

<%@ page import="org.grails.plugins.google.visualization.data.Cell; org.grails.plugins.google.visualization.util.DateUtil" %>
<html>
<head>
 .... 

<r:script disposition='head'>   
 var reload = function()
 return <g:remoteFunction action="reloadshowdetails" controller="monitor" params="[ turbineId: turbineId ]" update="reloadshowdetails"/>}           
 setInterval( reload, 5000 );
</r:script>
<gvisualization:apiImport/>
</head>
<body>
....

gvisualization:gauge elementId="gauge" width="${200}" height="${200}" redFrom="${90}"        redTo="${100}" yellowFrom="${75}" yellowTo="${90}" minorTicks="${5}" columns="${guageColumns}" data="${guageData}" />

<table cellpadding="2" cellspacing="0">
 <tr><td> 
      <div id="gauge"></div>
 </td></tr>
 </table>    
</body>
</html>

reloadshowdetails.gsp -

<table>
<tbody> 
...
<gvisualization:gauge elementId="gauge2" width="${200}" height="${200}" redFrom="${90}" redTo="${100}" yellowFrom="${75}" yellowTo="${90}" minorTicks="${5}" columns="${guageColumns}" data="${guageData}" />

<table cellpadding="2" cellspacing="0">
    <tr><td>
            <div id="gauge2"></div>
     </td></tr>
 </table>
.... 


person Steve    schedule 17.06.2014    source источник


Ответы (1)


кажется, что скрипт, который обновляет диаграмму, не вызывается, если я предполагаю, что у вас есть удаленная функция reloadData в вашем контроллере, которая возвращает данные диаграммы, то когда вы загружаете новые данные диаграммы с сервера, вы должны выполнить код javascript что будет рисовать его на вашей странице. попробуйте добавить новую функцию (например, перерисовать) и вызвать ее при полной загрузке данных диаграммы:

function repaint(guageData){
var chart = new google.visualization.ColumnChart(document.getElementById('html_chart_id'));
chart.draw(guageData, options);
}

var loadedData = function()
 return <g:remoteFunction action="reloadshowdetails"
 controller="monitor" params="[ turbineId: turbineId ]" update="reloadshowdetails"/>;
repaint(loadedData);

где html_chart_id — идентификатор вашего графика.

person Mifmif    schedule 17.06.2014
comment
Я не думаю, что это проблема с данными - данные извлекаются на каждой странице с использованием ${fieldValue(bean: turboInstance .... и отлично работают для других полей, я также использовал фиктивные данные в gsp reloadshowdetails, но все еще нет диаграммы .В любом случае попробую перекрасить как вы описываете - person Steve; 17.06.2014