使用Jade&快递到这里。
'#{value.users}'
是一个数组。
'#{user.username}'
是一个字符串。
尝试if '#{value.users}'.indexOf('#{user.username}')
如果为true,那么我会显示一堆东西,否则,不应该渲染。
Jade的语法很好,但即使#{value.users}'.indexOf('#{user.username}')
是假的,也会呈现if语句中的内容。
例如,如果user.username = bob
和value.users = ['tim', 'billy']
,则if
语句正在通过,但显然不应该。{/ p>
我做错了什么?
答案 0 :(得分:6)
不应该是#{value.users.indexOf(user.username)}
吗?
执行#{}
内的任何js命令。您应该能够将整个表达式放在单个'#{}'
通过说if '#{value.users}'.indexOf('#{user.username}')
'#{value.users}'
被序列化为一个字符串,当使用.indexOf()
时,它在字符串中搜索,而不是原始数组。
如果您在if语句中使用它,为什么不直接执行js? 例如
- if ( value.users.indexOf(user.username) )
p some jade
- else
p alternate jade
https://github.com/visionmedia/jade#a8
或者,您可以使用下划线库。
http://underscorejs.org/#indexOf
如果您想在Jade模板中使用它,请务必在您的应用中要求()或请求当地人。
答案 1 :(得分:5)
我不熟悉Jade,但你不需要测试!= -1或== 1?
str.indexOf('#{user.username}') ! = -1
或者因为你正在测试一个数组,所以就像。
array.toString().indexOf('#{user.username}') != -1
更新:随着ES6的出现,我更新了一点
array.includes('#{user.username}') // returns true or false
str.includes('#{user.username}') // returns true or false