我正在创建一个日期值数组并将其保存在 app.locals
中变量如下图:
prepDataList.forEach(function(item){
var str = item.createdAtDate.toDateString();
//str = str.substring(4, 10);
labelsArray.push(str);
countsArray.push(item.radarCount);
});
app.locals.chart1LabelsArray = labelsArray;
app.locals.chart1CountsArray = countsArray;
console.log("App locals labels array: ", app.locals.chart1LabelsArray);
console.log()
结果如下:
App locals labels array: [ 'Thu Mar 26 2015',
'Fri Mar 27 2015',
'Sat Mar 28 2015',
'Sun Mar 29 2015',
'Mon Mar 30 2015' ]
所以app.locals.chart1LabelsArray
变量似乎被正确存储为数组。
现在,在我看来(或者更确切地说,在我 View 内的脚本标记中),如果我调用此变量,它似乎不会保留其数组格式。
- 对象的类型就是
[Object object]
.
- 我无法执行任何功能,例如
forEach
- 结果似乎也不是字符串,因为我无法运行
.split(',');
对它发出命令。
代码:
console.log(<%= chart1LabelsArray %>);
导致此错误:
[Error] SyntaxError: Unexpected identifier 'Mar'. Expected ')' to end a argument list. (anonymous function)
我也尝试过使用整数数组,但似乎遇到了同样的问题。
当我检查浏览器中的元素时,对于上面的行,我看到的是:
console.log(Thu Mar 26 2015,Fri Mar 27 2015,Sat Mar 28 2015,Sun Mar 29 2015,Mon Mar 30 2015);
看来app.locals
我在 <%= chart1LabelsArray %>
创建的变量正在被拉起,但不是作为数组。它们作为一组连续的值出现,似乎无法使用任何字符串或集合相关的函数来访问它们。
有人知道我错过了什么吗?
编辑我没有注意到你正在将模板化为JavaScript。以下段落不太相关。您所需要的只是在数组中创建模板时调用 JSON.stringify()
。
<小时/>
所有脚本必须位于 lodash 标签内
<%= for(var i=0; i<chart1LabelsArray.length; i++){ %>
<span> label is <%= chart1LabelsArray[i] %></span>
<% } %>
PS,对于比静态数据列表更复杂的事情,我更喜欢将所有数据传递给客户端 JS,而不是在服务器端模板中操作 DOM。我特别不喜欢在每个请求上使用模板生成不同的脚本。
<body data-labels="<%= JSON.stringify(chart1LabelsArray) %>" ng-app="chartApp">
</body>
<script>
var labels = JSON.parse($('body').data(labels))
</script>
我是一名优秀的程序员,十分优秀!