【问题标题】:How do I correctly reference an EJS function defined in another EJS file?如何正确引用另一个 EJS 文件中定义的 EJS 函数?
【发布时间】:2020-02-01 14:46:45
【问题描述】:

文件 1:ejsfunction.ejs

<% function funcTest() {return 42;} %>

文件 2:file.ejs

<% include ejsfunction.ejs %>
<% funcTest(); %>

输出:

ReferenceError:
    1| <% include ejsfunction.ejs %>
 >> 2| <% funcTest(); %>
funcTest is not defined

您好,我正在处理一个 node.js/express 项目,并尝试将一些函数从 ejs 文件中重构到第二个文件中,然后使用 include 指令将它们重新加载。不幸的是,我正在做某事错误,因为我在上面的代码中不断收到 ReferenceError。

谁能告诉我我做错了什么?

提前非常感谢!丹。

【问题讨论】:

  • 我不确定 EJS 是否支持以这种方式调用函数。我在ejs.co/#docs 看不到任何这样的例子。看起来您必须将函数转换为模板,并将其包含在您想要“调用”它的任何位置。
  • Re Mukhammadsher 的评论:感谢您的链接。实际上,我已经在我的项目中使用了 partials,而且效果很好。但是,我没有在第二个文件的这些部分中引用任何函数。
  • 澄清一下:在我上面非常简单的例子中,看起来我可以从我的常规 javascript 代码中将一个函数传递给 ejs - 但是,在我的真实代码中,我确实需要 ejs功能 - 不仅仅是普通的 javascript。

标签: javascript node.js express ejs


【解决方案1】:

一段时间后,我还没有弄清楚如何做我最初的要求,但我找到了解决方法。

如果您想将常用函数分解为单独的部分,您可以 - 您不能从该部分文件之外调用这些函数。

所以,诀窍是,从部分本身调用函数并“就地”输出结果。然后只需在 EJS/HTML 中包含要在 HTML 中使用输出的部分。

两位原始评论者一直都是正确的(谢谢 ahwayakchih)——我当时只是不明白答案。

由于您无法将参数“传递”到部分,因此您需要处理从渲染函数传入的“全局变量”。

当我有时间时,我会发布一个真实世界的代码示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-23
    • 2018-11-13
    • 2016-01-14
    • 2022-10-14
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多