6

ここでJade&Expressを使用します。

'#{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ステートメントは渡されますが、明らかに渡されるべきではありません。

私は何が間違っているのですか?

4

2 に答える 2

6

そうではない#{value.users.indexOf(user.username)}ですか?

内部のjsコマンド#{}が実行されます。表現全体を1つの中に収めることができるはずです'#{}'

は文字列にシリアル化されており、使用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テンプレート内で使用する場合は、必ずアプリでrequire()するか、ローカルにリクエストしてください。

于 2013-02-27T22:28:24.793 に答える
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
于 2013-02-26T20:35:51.880 に答える