将字符串和变量连接到Jade的变量名称

时间:2012-10-09 00:01:47

标签: javascript string variables concatenation pug

将一个字符串和一个变量连接成一个Jade可以理解的变量名,是否有一个很好的,干净的方法?

理想情况下,它看起来像这样:

each #{shape + 'Text'} in #{shape + 'Texts'}
    li #{shape + 'Text'}

我尝试使用window[shape + 'Text'],但这似乎不起作用。也许我做错了?

这就是我想要这样做的原因:

我有一个名为shapes的数组,如下所示:['square', 'triangle', 'circle']

我正在使用Jade的each ... in ...函数来遍历此数组。在我的函数的每次迭代中,我需要做一些其他几个数组中的另一个each ... in ...。而不是使用直接变量来选择要迭代的数组,例如each shape in shapes,我想将shape与字符串连接起来,以获得类似each squareText in squareTexts或{{1}的内容}}

目前,我正在使用条件来达到我想要的结果,但它很冗长而且不符合语言的极简主义精神。

提前感谢任何建议。

4 个答案:

答案 0 :(得分:5)

所以看起来在我的情况下,诀窍是使用Javascript的eval()函数将变量名和字符串连接成一个新的变量名。这是我成功(和简洁)的实现。

- var items = eval(shape + 'Texts');
each item, i in items
    li #{items[i]}

答案 1 :(得分:0)

我建议看一个用Jade创建/评估这个选项的选项,尽可能简单地保留jade代码(以及任何用于此事的模板)。

答案 2 :(得分:0)

您可以在括号中包装变量和字符串。

each item, i in items
  li=(shape + 'Texts')

答案 3 :(得分:-2)

我并不完全遵循你所指的内容,因为我根本不知道jade,但你会像这样循环一个数组。

var a = ['square', 'triangle', 'circle'];
var i, l, item;
l = a.length;
for (i = 0; i < l; i++) {
  item = a[i];
  // At this point, you can refer to window[item + 'Text']
  // but I'm not sure what that is supposed to mean.
}

还有一个Array.prototype.every可用,但我通常不打算将它用于旧版浏览器。