我是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| };
unexpected text ;
如果我删除console.log,则会抛出错误说:
TypeError: mweb/views/collections.jade:18
> 18| a(href="/collection/#{item.name}") #{capitalize(itemName)}
据我所知,在jade编译期间调用了大写,并且该函数不可用,因为脚本标记也被编译到html中。评估此呼叫的最佳方式是什么? a)服务器端或 b)客户方?
THX
答案 0 :(得分: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)}
但最好将它放在模板之外并传递对辅助对象的引用
答案 1 :(得分:7)
我意识到这很老了,但是当你在jade中声明一个函数时,你需要做
script.
不是
script
这个时期会产生影响,并且允许jade接受它实际上是一段代码,而不是HTML。
答案 2 :(得分:4)
通过此#{capitalize(itemName)}
,您尝试调用从控制器(后端)传递给模板的函数。
例如(/ routes / index.js):
res.render('index', { title: 'Express test', fs : { echo : lang} });
在 index.jade
中 a(href='/register') #{fs.echo('xxx')}
其中
郎
是前面定义的函数,它带有一些参数。