2013-02-26 17 views
6

Arbeiten mit Jade & Express hier.Verwenden von indexOf in Jade

'#{value.users}' ist ein Array.

'#{user.username}' ist eine Zeichenfolge.

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

Wenn wahr zu tun Probieren, dann habe ich ein paar Sachen zeigen sonst gemacht werden sollte.

Jade ist in Ordnung mit der Syntax, aber selbst wenn #{value.users}'.indexOf('#{user.username}') falsch ist, wird der Inhalt innerhalb der if-Anweisung gerendert.

Zum Beispiel, wenn user.username bob = und value.users = ['tim', 'billy'], die if Aussage ist vorbei, wenn es sollte klar nicht sein.

Was mache ich falsch?

+0

Überprüfen Sie, was '['tim', 'billy']. IndexOf ('bob')' ergibt: '-1'. Kein falscher Wert ('0') – Bergi

Antwort

5

Ich bin nicht mit Jade vertraut, aber müssten Sie nicht gegen! = -1 oder == 1 testen?

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

oder weil Sie testen gegen eine Anordnung, etwas entlang der Linien von.

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

UPDATE: Mit dem Aufkommen von ES6, aktualisiert ich ein wenig unter

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

' array.toString() 'ändert die Bedeutung des Codes vollständig. – Bergi

6

Sollte es nicht #{value.users.indexOf(user.username)} sein?

Alle js-Befehle innerhalb #{} werden ausgeführt. Sie sollten in der Lage sein, den gesamten Ausdruck in einem einzigen '#{}'

passen Mit den Worten if '#{value.users}'.indexOf('#{user.username}') die '#{value.users}' in einen String serialisiert wird und wenn .indexOf() verwendet es innerhalb des Strings suchen, anstatt Original-Array.

Wenn Sie es in einer if-Anweisung verwenden, warum nicht einfach die js direkt ausführen? z.

- if (value.users.indexOf(user.username)) 
    p some jade 
- else 
    p alternate jade 

https://github.com/visionmedia/jade#a8

Alternativ können Sie den Unterstrich-Bibliothek verwenden.

http://underscorejs.org/#indexOf

Wenn Sie es in Jade-Vorlagen verwenden möchten, achten Sie darauf, require() es in der App oder fordern Einheimische.

+0

@karaxuna danke –