使用 <script> 标签中的 Handlebars.js 上下文

Use Handlebars.js context from within <script> tag

我正在尝试使用在 Express backend using Handlebars.js (express-handlebars on npm) as the view controller from within a <script> tag. I read this post 上设置的上下文变量,但答案似乎有点乱。这是代码中的问题:

app.js(服务器)

app.get('/', (req, res) => {
  res.render('index', {
    data: [1, 2, 3]
  }
}

index.handlebars

<script>
  const data = {{data}}
</script>

<script src="js/index.js"></script>

index.js(客户端)

console.log(data)

我这样做是为了可以从 index.js 访问 data 变量,所以更好的方法可以解决这个问题。

不幸的是,这是唯一的方法如果您需要使用车把模板一次性发送html作为响应。

服务器端呈现会创建一个完整的页面,您的所有数据都应该 "parsed" 并准备就绪。

您可以通过使用 AJAX 请求(请注意,这会添加第二个请求)和 [=37] 规避 =] 来自那里的 JSON 响应你可以处理它(推荐方式):

//somewhere in your page.hbs

    <script>
      const loadObject = () => fetch('/express/path')
                                 .then(response => response.json)
                                 .then(obj => {
                           //do whatever with the obj
    })
      window.onload = loadObject; 

    </script>

并在您的快递中。

  app.get('/express/path', (req, res) => {
      res.json({
        data: [1, 2, 3]
      })
    })

您还可以使用 <script src=/express/to/javascript > 来请求特定的 .js 文件。 然后从那里使用任何全局范围变量。您可以在下面的 link 中看到很好的讨论:

HTML/Javascript: how to access JSON data loaded in a script tag with src set