2013-02-26 5 views
6

翡翠で作業する&ここではExpressを使用します。翡翠でindexOfを使用する

'#{value.users}'は配列です。

'#{user.username}'は文字列です。 trueの場合if '#{value.users}'.indexOf('#{user.username}')

をやろうとし

は、その後、私はそれ以外の場合は、レンダリングされるべきではない、原料の束を表示します。

玉は文法では問題ありませんが、#{value.users}'.indexOf('#{user.username}')が偽であっても、if文内のコンテンツがレンダリングされています。

たとえば、user.username = bob、value.users = ['tim', 'billy']の場合、明らかにそうであってはならない場合はifの文が渡されます。

私は間違っていますか?

+0

'['tim'、 'billy']。indexOf( 'bob')' yields: '-1'を確認してください。偽の値( '0')ではない – Bergi

答えて

5

私は翡翠に慣れていませんが、テストする必要はありません!= -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

6

の下に更新され、それは#{value.users.indexOf(user.username)}ではないでしょうか?

#{}内のjsコマンドが実行されます。あなたはむしろ元の配列よりも、それは文字列内の検索です.indexOf()を使用した場合、文字列にシリアライズされているif '#{value.users}'.indexOf('#{user.username}')'#{value.users}'を言うとすることにより、単一の'#{}'

の内側にあなたの全体の表現に合うことができるはずです。

if文で使用している場合は、jsを直接実行しないでください。例えば、 。また

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

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

、あなたはアンダースコアライブラリを使用することができます。あなたはジェイドテンプレート内で使用したい場合は

http://underscorejs.org/#indexOf

、あなたのアプリケーションまたは要求地元でも)(必要とするようにしてください。

+0

@kaxaxunaありがとう –