2016-07-21 15 views
0

Ich bin auf der Suche nach Verbesserung der Leistung und Lesbarkeit durch Zwischenspeichern wiederholter Werte während each={} Schleifen in RiotJS. Gibt es einen Weg dies zu tun, der den Wert nicht rüberbringt und/oder unnötigen Leistungsaufwand verursacht?RiotJS: Wie werden Werte während Schleifen gespeichert?

Vorher:

<my-tag> 
    <p each="{item in data}"> 
    <b if="{item.style == 'b'}">{item.text}</b> 
    <i if="{item.style == 'i'}">{item.text}</i> 
    </p> 
    data = [ 
    {"text": "bold me", "style": "b"}, 
    {"text": "italicize me", "style": "i"} 
    ]; 
</my-tag> 

<!-- Renders <p><b>bold me</b></p> <p><i>italicize me</i></p> --> 

Nach:

<my-tag> 
    <p each="{item in data}"> 
    {style=item.style} 
    {text=item.text} 
    <b if="{style == 'b'}">{text}</b> 
    <i if="{style == 'i'}">{text}</i> 
    </p> 
    data = [ 
    {"text": "bold me", "style": "b"}, 
    {"text": "italicize me", "style": "i"} 
    ]; 
</my-tag> 

<!-- Renders <p>b bold me <b>bold me</b></p> <p>i italicize me <i>italicize me</i></p> --> 

jsfiddle

Antwort

1

Ich glaube, Sie das tun wollen:

<p each="{data}"> 
    <b if="{style == 'b'}">{text}</b> 
    <i if="{style == 'i'}">{text}</i> 
</p> 

jsfiddle

+0

Dies deckt meinen Anwendungsfall nicht ab, da ich nach einem komplexeren Verhalten suche: '{cell = parent.row [column.key]} {cell.content}', etc. Ziemlich sicher, dass die "richtige" Antwort darin besteht, eine Vor-Render-Funktion zu verwenden, um die Daten neu zu strukturieren, um sie an die DOM-Hierarchie anzupassen; Ich habe nur gehofft, dass es einen sauberen Weg gibt, das Gleiche inline zu machen. –

+0

Ich verstehe, ich denke, es ist eine gute Idee, Ihre Daten in eine einfachere Struktur zu konvertieren. – Freez

0

Folgendes Bugs auf 2.5, funktioniert aber gut aus auf dem next Zweig (3.0.0-alpha.5):

<my-tag> 
    <p each="{item in data}"> 
    {(style=item.style) && false} 
    {(text=item.text) && false} 
    <b if="{style == 'b'}">{text}</b> 
    <i if="{style == 'i'}">{text}</i> 
    </p> 
    data = [ 
    {"text": "bold me", "style": "b"}, 
    {"text": "italicize me", "style": "i"} 
    ]; 
</my-tag> 

Da die Ausdrücke falsch bewerten, sie machen es nicht, aber die Werte von style und text werden immer noch gesetzt.