在Jade中使用indexOf

时间:2013-02-26 19:58:20

标签: javascript node.js express pug

使用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>

我做错了什么?

2 个答案:

答案 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