【问题标题】:Pass variable to EJS include将变量传递给 EJS 包括
【发布时间】:2014-01-30 03:10:10
【问题描述】:

我在几个地方使用了一个全局标头,我试图在渲染模板时可以传递的变量中定义它的位置。

类似:

var headerLocation = 'some/location/header.ejs'; 
res.render( viewDir + '/index', {
        header: headerLocation 
    } );

在模板文件中:

<% include header %>

header 是通过渲染传入的值。

这似乎不可能,但也许我错过了一些东西,所以想在这里问。

编辑:

cmets 在下面的答案中提到了这一点,但总而言之,这现在在 EJS 的第 2 版中可用。

请看这里:https://github.com/mde/ejs#includes 以及相关讨论在这里:https://github.com/tj/ejs/issues/93

【问题讨论】:

    标签: node.js ejs


    【解决方案1】:

    这里有一些可以实现动态包含的演示代码。

    查看

    <div flex class="main-container">
        <%- include(page) %>
    </div>
    

    路由器

    router.get('/', function (req, res, next) {
        res.render('pages/index', {
            page: 'home'
        });
    });
    

    【讨论】:

      【解决方案2】:

      已添加此功能:如果不是路径(未找到文件),则将其评估为变量名。 https://github.com/visionmedia/ejs/pull/156

      【讨论】:

      • 谢谢。实际上,我在发布这个问题后不久就遇到了github.com/visionmedia/ejs/issues/93。虽然有一个拉取请求,但它似乎还没有发布到 npm。希望它会很快被接受并发布。一旦发生这种情况,我会将此答案标记为正确,以免误导可能登陆这里的其他人。一个有趣的注释,无论出于何种原因,仅在 Windows 上,使用节点全局对象适用于此。所以 以某种方式起作用。但不在 Mac 或 Linux 上。奇怪的一个。
      • 想用这一行(在新代码中)改变 bug.push 行: buf += "' + (function(){" + include + "})() + '"; (可能会导致 .push 出错)
      • 我刚刚尝试过,将路径存储在 var 中并尝试将 var 与 include 一起使用,它仍然尝试使用 var 名称而不是值。 EJS1.0.0
      • github.com/mde/ejs#includes - 所以现在在 EJS 的第 2 版中可用,但在第 1 版中不可用。
      【解决方案3】:

      尽管这是一个老问题,但为了别人的利益而回答它。

      根据 github 文档,EJS 似乎没有块的概念,只有编译时包含。由于它的编译时间包括在内,您需要对位置进行硬编码。

      因此,您只需要传递一些标志并执行 if 检查标头或将标头解析为 html 并将其传递给所有模板...

      【讨论】:

        【解决方案4】:

        老话题,但它可能对某人有所帮助。

        EJS 的伟大之处在于它只是 Javascript。所以像下面这样的东西应该可以工作:

        <%
        const fs = require('fs');
        const content = fs.readFileSync(partial);
        %>
        <%- content %>
        

        希望对你有帮助。

        【讨论】:

          猜你喜欢
          • 2014-06-30
          • 2016-03-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-10
          • 2018-11-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多