通过ejs将参数从node.js传递到knockout.js

通过ejs将参数从node.js传递到knockout.js,node.js,knockout.js,ejs,Node.js,Knockout.js,Ejs,我有一个node.js,它使用mongodb数据并使用knockout.js输出列表 当我调用视图时,我使用 res.render('list', { items:json }); 在list.ejs模板页面中,我定义了一个隐藏元素: <input type="hidden" id="hidden" value="<%= items %>"> 嗯…它运行,但我认为(希望)一定有更好的方法来做它。。。例如,有没有避免隐藏html变量的方法?如果要提供完整的页面,可以添加

我有一个node.js,它使用mongodb数据并使用knockout.js输出列表

当我调用视图时,我使用

res.render('list', { items:json });
在list.ejs模板页面中,我定义了一个隐藏元素:

<input type="hidden" id="hidden" value="<%= items %>">

嗯…它运行,但我认为(希望)一定有更好的方法来做它。。。例如,有没有避免隐藏html变量的方法?

如果要提供完整的页面,可以添加一个内联脚本。。。当然,这会污染全局名称空间

<script>
    var tkts = <%= items %>;
</script>

var-tkts=;

如果您正在使用AJAX获取此页面。。。然后将其分解为两个AJAX请求。。。其中一个获取模板,另一个可以获取项目列表(作为JSON请求)。它们可以并行运行,因此可能会更快。

目前,我可以想出三种方法来实现这一点

1.)将数据分配给JavaScript代码中的变量:
solution1={“name”:“solution1”}
解决方案1
2.)向喜欢的元素添加数据属性:

parse(document.getElementById('solution2').dataset.value)
3.)使用script标记并选择与text/javascript或application/javascript不同的内容类型
{“name”:“solution3”}
parse(document.getElementById('solution3').innerHTML)
现场演示

个人便条 听起来可能很无聊,但第一个选择可能是最好的选择。它是快速的,需要尽可能少的代码,只是工作。如果可以立即将数据作为JavaScript数据,我看不出为什么您希望首先将数据保存在字符串中

<script>
    var tkts = <%= items %>;
</script>
<script type="text/javascript">solution1 = {"name": "solution1"}</script>

solution1
<div id="solution2" data-value='{"name": "solution2"}'></div>

JSON.parse(document.getElementById('solution2').dataset.value)
<script id="solution3" type="script" type="text/json">{"name": "solution3"}</script>

JSON.parse(document.getElementById('solution3').innerHTML)