jade模板里面的javascript函数执行

Kir*_*ran 16 javascript node.js express pug

我是nodejs的新手,并尝试为html内容创建一个jade文件myfile.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)}
Run Code Online (Sandbox Code Playgroud)

但是,在运行它时会引发以下错误:

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|     };
Run Code Online (Sandbox Code Playgroud)

unexpected text ;

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

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

据我所知,在jade编译期间调用了大写,并且该函数不可用,因为脚本标记也被编译到html中.在a)服务器端或b)客户端评估此呼叫的最佳方式是什么?

谢谢

And*_*rov 19

你需要在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)}
Run Code Online (Sandbox Code Playgroud)

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


use*_*388 7

我知道这很老了,但是当你在玉器中声明一个函数时,你需要这样做

script.
Run Code Online (Sandbox Code Playgroud)

script
Run Code Online (Sandbox Code Playgroud)

这个时期有所不同,并且允许jade接受它实际上是一段代码,而不是HTML.


小智 6

通过这个,#{capitalize(itemName)}您尝试调用从控制器(后端)传递到模板的函数。

例如(/routes/index.js)

res.render('index', { title: 'Express test', fs : { echo : lang} });
Run Code Online (Sandbox Code Playgroud)

在index.jade

 a(href='/register') #{fs.echo('xxx')}
Run Code Online (Sandbox Code Playgroud)

在哪里

是一个前面定义的函数,它带有一些参数。