Jade 模板内的javascript函数执行

标签 javascript node.js express pug

我是 nodejs 的新手,正在尝试为 html 内容 myfile.jade 创建一个 Jade 文件: 以下是文件内容:

extends layout
block content
   script
     function capitalize(s) { 
       console.log("Testing js exec");
       return s.charAt(0).toUpperCase() + s.slice(1); 
     };
  table
    - each item in list
      tr
        td
          a(href="/collection/#{item.name}") #{capitalize(itemName)}

但是,运行时会抛出以下错误:

Error: mweb/views/collections.jade:8
    6|   script
    7|     function capitalize(s) { 
  > 8|       console.log("Testing js exec");
    9|       return s.charAt(0).toUpperCase() + s.slice(1); 
    10|     };

意外的文字;

如果我删除 console.log,它会抛出错误:

TypeError: mweb/views/collections.jade:18
  > 18|             a(href="/collection/#{item.name}") #{capitalize(itemName)}

据我所知,在jade编译期间正在调用capitalize,并且该功能不可用,因为脚本标签也被编译到html中。对我来说评估此电话的最佳方式是什么 a) 服务器端或 b) 客户端?

谢谢

最佳答案

你需要在jade范围内定义函数,而不是在你生成的JS中:

block content
   -  function capitalize(s) { return s.charAt(0).toUpperCase() + s.slice(1); };
  table
    - var list = ['one', 'two']
    - var itemName = 'test test'
    - each item in list
      tr
        td
          a(href="/collection") #{capitalize(itemName)}

但最好将它放在模板之外并将引用传递给辅助对象

关于 Jade 模板内的javascript函数执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20940860/

相关文章:

javascript - 如何使用 jQuery 隐藏仅包含空格的 HTML 元素?

node.js - 使用 Elastic Beanstalk 权限问题部署 NodeJS

javascript - 使用正斜杠访问 JSON 键 NodeJS

javascript - 在了解刷新 token 、存储位置和方式以及存储内容方面需要帮助

javascript - 检查完美数并打印出除数?

javascript - new Date() 在heroku 服务器上返回晚上 8 点的时间,即使我输入时间 11 :59 PM. 如何使其准确?

node.js - MSB3411 无法加载 Visual C++ 组件

javascript - 传递数据以在 ExpressJS + Reactjs 中查看

node.js - NodeJS返回值时出现循环结构错误

javascript - 当 "looping"时,无法在 native Promise 之间传递数据