【问题标题】:Unable to access an object in include partials in EJS template无法访问 EJS 模板中包含部分的对象
【发布时间】:2021-05-10 16:15:49
【问题描述】:

我正在尝试将一个对象发送到我的应用程序中所有 EJS 模板中都存在的侧边菜单。

大约有 10 个 EJS 模板由 10 个路由器端点呈现。以下是典型端点的样子:

router.get( "/example", ( req, res ) => {
    res.render( "../views/example.ejs" );
} );

在所有模板中,我有 3 个 include 部分:header, footer and aside menu

典型的模板如下所示:

<%- include ("./partials/header") %>

// some body content

<%- include ("./partials/asidemenu") %>

<%- include ("./partials/footer") %>

我在文件系统中有这个数组,它由我需要在asidemenu 模板中传递的数据对象组成。

到目前为止我尝试了什么:

我在端点中获取数据并将其作为第二个参数放入res.render

{ data: data }

我可以使用&lt;%= data %&gt; 访问相应EJS 模板中的数据,我将include partials 作为第二个参数:

&lt;%- include ("./partials/asidemenu", { data: &lt;%= data %&gt; }) %&gt;.

然后在asidemenu.ejs,我尝试以&lt;%= data %&gt; 访问数据,但我得到data is undefined

我在这里做错了什么?

【问题讨论】:

  • sidemenu 模板长什么样?
  • 还要检查数据变量是否为空
  • 这是一个简单的模板。我想通过使用&lt;%= data[0].name %&gt; 来使用data 数组中第一个对象的属性值。
  • 数据变量不为空,因为它正在端点中获取。

标签: javascript node.js express ejs


【解决方案1】:

在将数据变量传递给包含时,您需要删除插值标记。

<%- include("./partials/asidemenu", { data: data }) %>

【讨论】:

  • 嘿。获取data is not defined。 :(
  • 哦,看起来你在调用渲染函数时错过了数据。调用渲染函数时需要指定第二个参数。 res.render("../views/example.ejs", { data })
  • 没有。我展示了端点的样子。我实际上在我的代码中使用了它。我在后面的帖子中也提到过。
  • 糟糕。我实际上把{ data: data } 放在了别的地方。哈哈。多么愚蠢的错误。只花了2个小时找到错误。无论如何,谢谢伙计。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
  • 2020-09-17
  • 1970-01-01
  • 2020-04-01
  • 2017-02-17
  • 2012-10-09
  • 1970-01-01
相关资源
最近更新 更多