在Jade中使用indexOf
在这里使用Jade&Express。
'#{value.users}'
是一个数组。
'#{user.username}'
是一个string。
试图做if '#{value.users}'.indexOf('#{user.username}')
如果是的话,那么我显示一堆东西,否则,不应该被渲染。
Jade与语法正常,但即使在#{value.users}'.indexOf('#{user.username}')
是虚假的时候,if语句中的内容也正在呈现。
例如,如果user.username = bob
,并且value.users = ['tim', 'billy']
, if
语句传递,当它显然不应该。
我究竟做错了什么?
不应该是#{value.users.indexOf(user.username)}
?
#{}
内的任何js命令都会被执行。 您应该能够将您的整个expression式放在一个'#{}'
通过说if '#{value.users}'.indexOf('#{user.username}')
'#{value.users}'
被序列化为一个string,并且当使用.indexOf()
它将在string,而不是原始数组。
如果你在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模板中使用它,请确保在您的应用程序或请求当地人中需要()。
我不熟悉Jade,但是你不需要testing!= -1或== 1吗?
str.indexOf('#{user.username}') ! = -1
或者因为你正在对一个数组进行testing,所以我们沿着这条线进行testing
array.toString().indexOf('#{user.username}') != -1
更新:随着ES6的到来,我更新了一下
array.includes('#{user.username}') // returns true or false str.includes('#{user.username}') // returns true or false