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对象
我知道这很老了,但是当你在玉器中声明一个函数时,你需要这样做
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)
在哪里
郎
是一个前面定义的函数,它带有一些参数。
| 归档时间: |
|
| 查看次数: |
33417 次 |
| 最近记录: |