6

在这里与 Jade & Express 合作。

'#{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语句正在通过,而这显然不应该通过。

我究竟做错了什么?

4

2 回答 2

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 模板中使用它,请务必在您的应用程序中使用 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 回答