2

有没有一种很好、干净的方法可以将字符串和变量连接成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 squareTextsor的东西each circleText in circleTexts

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

提前感谢您的任何建议。

4

4 回答 4

6

So it looks like in my case, the trick is to use Javascript's eval() function to concatenate the variable name and the string into a new variable name. Here's my successful (and succinct) implementation.

- var items = eval(shape + 'Texts');
each item, i in items
    li #{items[i]}
于 2012-10-09T15:31:14.950 回答
0

我建议查看一个从 Jade 中创建/评估它的选项,尽可能简单地保持翡翠代码(以及与此相关的任何模板)。

于 2013-07-29T06:14:40.513 回答
0

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

each item, i in items
  li=(shape + 'Texts')
于 2015-11-03T02:50:20.557 回答
-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可用,但我通常不会费心将它修补到旧浏览器中。

于 2012-10-09T01:18:21.793 回答