【问题标题】:Escaping "{{}}" auto-interpretation in a Script tag in Handlebars在 Handlebars 的脚本标签中转义“{{}}”自动解释
【发布时间】:2021-01-27 03:14:12
【问题描述】:

我正在使用 node.js、express、mysql、bootstrap 和 handlebars 构建数据库表和其他 webapp 功能的可视化渲染。

我有一个 pages.js 文件,可以像这样呈现我的实习.hbs 文件:

        res.render('internships', {
            user: req.user,
            jobs: req.internships

        });

稍后我将在我的 hbs 文件中的脚本中访问作业,作业是如下所示的 json:

[
  {
    job_id: 1,
    company_name: 'Morgan Stanley',
    internship_title: '2021 Technology Summer Analyst Program',
    location: 'New York City',
    link: 'https://morganstanley.tal.net/vx/lang-en-GB/mobile-0/brand-2/xf-3786f0ce9359/candidate/so/pm/1/pl/1/opp/9768-2021-Technology-Summer-Analyst-Program-New-York/en-GB'  
  },
  {
    job_id: 2,
    company_name: 'Five Rings',
    internship_title: 'Software Developer Intern ',
    location: 'New York City',
    link: 'https://jobs.jobvite.com/fiverings/job/o1OAcfwl'
  },
  {
    job_id: 3,
    company_name: 'DRW',
    internship_title: 'Software Developer Intern',
    location: 'Chicago',
    link: 'https://drw.com/careers/job/1350323'
  }
]

由于作业是从其他地方的数据库中的表返回的 json,因此我想根据 db 表中的行数在表中使用可变数量的行来呈现该表。所以我有一个创建行的for循环,我试图用来自json的信息填充单元格:

<script>
    var table = document.getElementById("test");

    var len = {{jobs.length}};

    for (var i = 0; i < len; i++){

      // Create an empty <tr> element and add it to the last position of the table:
      var row = table.insertRow();

      // Insert new cells (<td> elements) at the 1st and 2nd position of the "new" <tr> element:
      var cell1 = row.insertCell(0);
      var cell2 = row.insertCell(1);
      var cell3 = row.insertCell(2);
      var cell4 = row.insertCell(3);
      var working = "{{jobs.0.company_name}}";
      cell1.innerHTML = working;
      cell2.innerHTML = "NEW CELL2"; 
      cell3.innerHTML = "NEW CELL2";
      cell4.innerHTML = "NEW CELL2";
    }
</script>

忽略单元格 2-4,我希望单元格 1 根据循环的 i 从 json 访问 company_name。所以这段代码有效,但当然它 puts Morgan Stanley in the cell each time 因为我将“0”元素硬编码到字符串中。

相反,我想改为 {{jobs.i.company_name}}。当我替换工作时 工作和 cell1 系:

 var desired = "jobs." + i + ".company_name";
      cell1.innerHTML = "{{" + desired + "}}";

我刚收到blank cells,没有显示公司名称。

如果我将 curleys 放在所需的 var 声明行中,

var desired = "{{jobs" + "." + i + ".company_name}}";

它不允许我连接 +i 部分,因为它会在“作业”之后立即开始读取卷曲表达式。我得到这个错误的一部分]3 说它在句点之后需要一个标识符并且不能执行 i 连接。

我需要弄清楚如何根据我之前放置的 json 构建一个中间带有 i 变量、0、1 或 2 的花括号括起来的字符串语句,而不是在我之前尝试解析花括号完成构建字符串。

【问题讨论】:

  • 在您开始解决输出company_name 的问题之前,我建议您重写您的模板,以便它使用模板语言(Handlebars)来创建您的HTML。您不应该设置元素的.innerHTML。这就是 Handlebars 应该为您做的。
  • 是的,好电话,我也得出了这个结论。我对什么是车把的理解肯定是脱节了,我应该先补救

标签: javascript html node.js web handlebars.js


【解决方案1】:

要修复您的串联,请尝试以下操作:

var desired = "{{jobs." + [i] + ".company_name}}";

【讨论】:

    猜你喜欢
    • 2014-02-23
    • 2013-06-29
    • 2013-01-24
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    相关资源
    最近更新 更多