【发布时间】:2018-08-27 13:19:30
【问题描述】:
我正在尝试在 Thymeleaf 模板中动态创建 Javascript,以便使用 Google Chart 的 Timeline 包(注意 - 此包在 Google 库的 Spring 版本中不可用)。
我有一个带有以下代码的 Thymeleaf 片段 ganttchartvalue.html,然后将其包含到实际页面中:
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript" th:inline="javascript">
/*<![CDATA[*/
google.charts.load('current', {'packages':['timeline']});
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
var container = document.getElementById('timeline');
var chart = new google.visualization.Timeline(container);
var dataTable = new google.visualization.DataTable();
dataTable.addColumn({ type: 'string', id: 'Card' });
dataTable.addColumn({ type: 'date', id: 'Start' });
dataTable.addColumn({ type: 'date', id: 'End' });
dataTable.addRows([ /*[[${Parms}]]*/ ]);
chart.draw(dataTable);
}
/*]]>*/
</script>
在我的 GanttController 类中,我有以下代码:
String Parms = "[ 'MegaCorp App 1', new Date(2018, 7, 2), new Date(2019, 4, 9) ]"; model.put("Parms", Parms);
(模型属于 Map 类型)。
这接近工作,但生成的输出(最终页面源)是:
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
/*<![CDATA[*/
google.charts.load('current', {'packages':['timeline']});
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
var container = document.getElementById('timeline');
var chart = new google.visualization.Timeline(container);
var dataTable = new google.visualization.DataTable();
dataTable.addColumn({ type: 'string', id: 'Card' });
dataTable.addColumn({ type: 'date', id: 'Start' });
dataTable.addColumn({ type: 'date', id: 'End' });
dataTable.addRows([ "[ 'MegaCorp App 1', new Date(2018, 7, 2), new Date(2019, 4, 9) ]"]);
chart.draw(dataTable);
}
/*]]>*/
</script>
问题:
如何消除 dataTable.addRows 方法调用中插入文本前后的额外双引号 (") 以便此代码正常工作?
谢谢
【问题讨论】:
标签: spring google-visualization thymeleaf