2013-02-26 4 views
6

Работа с Jade & Экспресс здесь.Использование indexOf в Jade

'#{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')' дает: '-1'. Не значение falsy ('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 внутри #{}. Вы должны быть в состоянии соответствовать все вашему выражению внутри одного '#{}'

Говоря 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, обязательно требуют() это в вашем приложении или требованию местных жителей.

+0

@karaxuna спасибо –

Смежные вопросы