2013-02-26 118 views
6

使用Jade &在这里快递。在Jade中使用indexOf

'#{value.users}'是一个数组。

'#{user.username}'是一个字符串。

争取做if '#{value.users}'.indexOf('#{user.username}')

如果属实的话,我展示了一堆东西,否则,不应该渲染。

Jade与语法正常,但即使#{value.users}'.indexOf('#{user.username}')是虚假的,if语句中的内容正在呈现。

例如,如果user.username = bob,并且value.users = ['tim', 'billy'],则if语句正在传递,当它显然不应该是。

我在做什么错?

+0

检查'['tim','billy']。indexOf('bob')'yield:'-1'。不是一个falsy值('0') – Bergi 2013-02-26 20:38:17

回答

5

我不熟悉Jade,但不需要测试!= -1或== 1吗?

str.indexOf('#{user.username}') ! = -1 

或者因为您正在测试一个数组,沿着某些数据行。

array.toString().indexOf('#{user.username}') != -1 

UPDATE:随着ES6的到来,我更新略低于

array.includes('#{user.username}') // returns true or false 
str.includes('#{user.username}') // returns true or false 
+0

'array.toString()'完全改变了代码的含义。 – Bergi 2013-02-26 20:39:18

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

如果你想使用它里面翡翠的模板,一定要要求()在你的应用程序或要求当地人。

+0

@karaxuna谢谢 – 2013-03-12 23:38:56