jade模板里面的javascript函数执行

我是nodejs的新手,并试图为html内容创build一个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)} 

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

 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| }; 

unexpected text ;

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

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

据我了解,在玉石编译期间调用了大写,并且由于脚本标签也被编译到html中,函数不可用。 在a)服务器端或b)客户端进行此次调用的最佳方式是什么?

谢谢

你需要在玉的范围内定义函数,而不是在你生成的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)} 

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

我意识到这是非常古老的,但是当你用玉来声明一个函数的时候,你需要这样做

 script. 

 script 

这个时期会产生变化,并且会让玉得知它实际上是一段代码,而不是HTML。

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

例如(/routes/index.js)

 res.render('index', { title: 'Express test', fs : { echo : lang} }); 

而在index.jade

  a(href='/register') #{fs.echo('xxx')} 

哪里

是之前定义的函数,需要一些参数。