2013-02-26 63 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