在外部js文件中访问hbs变量

时间:2019-09-10 15:40:17

标签: javascript node.js express handlebars.js

我正在使用hbs(表达把手)来呈现页面。 我想访问chat.hbs中的一些变量到一个外部文件,让我们说chat.js(客户端)

服务器端

{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es5",
    "lib": [ 
      "es6"
    ],
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "esModuleInterop": true,
    "rootDir": ".",
    "sourceMap": true,
    "allowJs": true,
    "noImplicitAny": true,
    "noUnusedLocals": true,
    "noImplicitThis": true,
    "strictNullChecks": true,
    "noImplicitReturns": true,
    "preserveConstEnums": true,
    "suppressImplicitAnyIndexErrors": true,
    "forceConsistentCasingInFileNames": true,
    "strict": true
  },
  "exclude": [ 
    "node_modules",
    "coverage"
 ]
}

客户端chat.hbs

 res.render('chat', {chatroom,user}) 

我想在外部js文件中访问chatrrom id以使用socket.io

2 个答案:

答案 0 :(得分:0)

您可以使用ajax来获取模板fetch('chat.hbs').then(r => r.text());,如果需要的话,可以共享已编译的函数。然后,如果表示客户端在浏览器中不起作用,则需要为客户端提供把手。

因此,如果与handlerbars.js一起使用,您的代码应如下所示:

var template = fetch('chat.hbs').then(r => r.text())
      .then(text => Handlebars.compile(text));

然后可以使用以下命令呈现它:

template.then(fn => {
   var html = fn({chatroom: {_id: 10}, user: {_id: 20}});
   // update DOM with html
});

答案 1 :(得分:0)

内部HBS文件

      <div hidden>
            <span id="chatroomid" chatroomid ="{{chatroom._id}}"></span>
        </div> 

我尝试了这个 客户端js文件内部

 const $chatroomid = document.querySelector('#chatroomid')
 const chatroomId = $chatroomid.getAttribute('chatroomid')