【问题标题】:handlebars parameter not defined in a loop未在循环中定义车把参数
【发布时间】:2021-02-19 02:53:47
【问题描述】:

这是我的路线。

router.get("/blocks/:id", (req, res) => {
    res.render("../views/block", {
        data: data,
        blockId: req.params.id,
    });
});

这是我的看法

<div class="row">
    {{#each data}}
        <div class="col">
            <div class="card" style="width: 18rem;">
                <div class="card-body">
                    <h1>/blocks/{{blockId}}</h1>
                </div>
            </div>
        </div>
    {{/each}}
</div>
  1. 在我看来,我遍历了datadata 在那里完全有效。我遇到的问题是&lt;h1&gt;blockId 不打印任何内容。造成这种情况的原因是#each data 的循环。一旦我删除循环,blockId 之后就是正确的。我想要的是blockId 对于data 的所有元素都应该相同。

  2. 如何从handlebars 文件中的url 中获取参数以传递a href 元素?在这种情况下,我不需要再次从 express 中返回blockId

【问题讨论】:

标签: javascript node.js express handlebars.js


【解决方案1】:

#with#each 这样的一些助手会更改数据的上下文,因此您需要包含../ 才能向上移动到父上下文。见https://handlebarsjs.com/guide/expressions.html#changing-the-context

对于您的示例,这看起来像

<div class="row">
    {{#each data}}
        <div class="col">
            <div class="card" style="width: 18rem;">
                <div class="card-body">
                    <h1>/blocks/{{../blockId}}</h1>
                </div>
            </div>
        </div>
    {{/each}}
</div>

对于第二部分,把手无法从其他窗口变量(如location)中读取,因此在您的路由中将其作为blockId 传递是公开此信息的正确方法。

【讨论】:

    猜你喜欢
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 2016-05-18
    相关资源
    最近更新 更多