Gibt es eine schöne, saubere Möglichkeit, eine Zeichenfolge und eine Variable zu einem Variablennamen zu verketten, den Jade verstehen kann?

Im Idealfall würde es ungefähr so aussehen:

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

Ich habe versucht, window[shape + 'Text'] zu verwenden, aber das schien nicht zu funktionieren. Vielleicht habe ich es falsch gemacht?

Hier ist, warum ich das tun möchte:

Ich habe ein Array namens shapes, das so aussieht: ['square', 'triangle', 'circle']

Ich verwende Jades each ... in ... -Funktion, um dieses Array zu durchlaufen. Innerhalb jeder Iteration meiner Funktion muss ich ein weiteres each ... in ... eines der wenigen anderen Arrays ausführen. Anstatt eine direkte Variable zu verwenden, um auszuwählen, über welches Array wie each shape in shapes iteriert werden soll, möchte ich shape mit einer Zeichenfolge verketten, um etwas wie each squareText in squareTexts oder {{X5 zu erhalten }}.

Derzeit verwende ich Bedingungen, um mein gewünschtes Ergebnis zu erzielen, aber es ist ausführlich und nicht im minimalistischen Geist der Sprache.

Vielen Dank im Voraus für jeden Rat.

2
ben 9 Okt. 2012 im 04:01

4 Antworten

Beste Antwort

In meinem Fall besteht der Trick darin, die eval() -Funktion von Javascript zu verwenden, um den Variablennamen und die Zeichenfolge zu einem neuen Variablennamen zu verketten. Hier ist meine erfolgreiche (und prägnante) Implementierung.

- var items = eval(shape + 'Texts');
each item, i in items
    li #{items[i]}
6
ben 9 Okt. 2012 im 15:31

Sie können eine Variable und eine Zeichenfolge in Klammern setzen.

each item, i in items
  li=(shape + 'Texts')
0
Jack Frost 3 Nov. 2015 im 02:50

Ich würde vorschlagen, eine Option zu prüfen, um dies aus Jade heraus zu erstellen / zu bewerten, und den Jade-Code (und alle Vorlagen für diese Angelegenheit) so einfach wie möglich zu halten.

0
JAR.JAR.beans 29 Juli 2013 im 06:14

Ich folge nicht genau dem, worauf Sie sich beziehen, da ich jade überhaupt nicht kenne, aber Sie würden ein Array wie dieses durchlaufen.

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.
}

Es gibt auch ein Array.prototype.every verfügbar, aber ich mache mir normalerweise nicht die Mühe, es in ältere Browser einzupacken.

-2
Jeremy J Starcher 9 Okt. 2012 im 01:18