将EJS模板中的对象数组传递给Javascript函数?

时间:2017-08-14 01:37:46

标签: javascript node.js express ejs

我有一个基本的Node.js应用程序,当用户点击某个路径时,会从路径中的数据库中检索许多记录,并作为数组传递给我的EJS模板。

这很好,但是,在EJS模板上我有一个按钮,它调用Javascript函数来随机播放这个数组。如何将此数组作为参数从EJS模板发送到Javascript函数?通常< %%>似乎在这种情况下不起作用。

我将数组传递给模板的代码如下所示:

router.get("/home", middleware.isLoggedIn, function(req, res) {
    Bean.find({ "userid": req.user._id }, function(err, beans) {
        if (err) {
            console.log(err);
        } else {            
            res.render("home", { path: req.path, beans: beans }); 
        }
    });
});

在我的模板中,我可以正常访问beans变量并循环,但是,我不能将它作为参数传递给它:

<a href="javascript:void(0);" class="btn btn-lg btn-yellow" role="button" onclick="match_engine(<% beans %>);">Match</a>  

上面会给我一个表达预期的&#39;我的编辑器中的错误和bean数组将在我的Javascript代码中未定义。我做错了什么?

此外,我可以从我的Javascript文件返回此数组并将其用作EJS中的新变量吗?

提前致谢!

编辑:

在我的EJS模板上,我有上面的按钮和一个表格:

<table class="table table-striped"> 
            <thead> 
                <tr> 
                    <th>Full Name</th> 
                    <th>Email</th> 
                    <th>Position</th> 
                </tr> 
            </thead> 
            <tbody>
                <% beans.forEach(function(bean) { %>
                    <tr> 
                        <td><%= bean.fname + " " + bean.lname %></td> 
                        <td><%= bean.username %></td> 
                        <td><%= bean.position %></td>
                    </tr> 
                <% }); %>
            </tbody> 
        </table>

我的目标是在加载页面时填充此表(这是有效的),然后当用户单击该按钮时,对象的beans数组将被洗牌并在表中重新显示。

2 个答案:

答案 0 :(得分:1)

<% %>表示不会在HTML代码中显示的javascript输入,例如<% for (var i = 0; i < arr.length; i++){ %>,当您希望将其显示在<%= %>时使用<%= beans %> HTML。在您的情况下,它将是<% beans %>而不是font-family: monospace;

希望它有所帮助!

答案 1 :(得分:0)

除非您的按钮调用一个函数来重新加载页面或像表单提交按钮那样使用所需的数据重新加载或重定向页面,否则您无法通过node.js实现您的目标。