2017-04-18 2 views
0

Ich bin neu in Ember/Lenker und benötigen ein Navigationstisch mit dem FormularEmber Lenker Generieren Tabellen

<table> 
    <tbody> 
     <tr class="headerRow"><td>Group 1</td></tr> 
     <tr><td>item1</td></tr> 
     <tr><td>item2</td></tr> 
    </tbody> 
    <tbody> 
     <tr class="headerRow"><td>Group 2</td></tr> 
     <tr><td>item1</td></tr> 
     <tr><td>item2</td></tr> 
    </tbody> 
</table> 

Diese mich Gruppen haben können zu erzeugen, die dynamisch erweitert/zusammengezogen werden kann, wenn die HeaderRow geklickt wird auf.

Beispiel JSON-Daten sieht aus wie

[{groupName: 'Group 1', item: 'item1'},{groupName: 'Group 1', item: 'item2'},{groupName: 'Group 2', item: 'item1'},{groupName: 'Group 2', item: 'item2'}] 

Ich muss durch die Daten zu durchlaufen und die tbody Gruppen erstellen, wenn der aktuelle Gruppenname als die letzte Gruppennamen unterscheidet. Dies ist eine triviale Aufgabe in Javascript/jQuery, um den HTML-Code als String zu erstellen und offene und body-Zeilen hinzuzufügen, aber wie mache ich das in Handlebars. Ich kann keine Möglichkeit finden, die letzte Gruppe in einer Variablen zu speichern (so dass ich mit der aktuellen Gruppe vergleichen kann), während ich die Formatierung {{# jede Daten als | Elementindex |}} Lenkstange verwende.

Ich habe die Aufgabe des Generierens der Tabelle über eine JS-Zeichenfolge mithilfe einer Hilfsfunktion ausgeführt, aber ich muss Komponentenaktionen an die Zeilen in der Tabelle anhängen. Was ist der richtige Weg, dies in Ember zu tun? Ich benutze Ember CLI 2.9.1.

+0

Hier ist ein Anfang: https://ember-twiddle.com/ bb1e5a11ae918041c128ed44a1648406? openFiles = routes.application.js% 2Ctemplates.components.menu-table.hbs Es scheint wild zu sein, dass Sie eine Tabelle für nav verwenden, und Ihr JSON muss möglicherweise anders überlegt werden - aber die Frage, wie man durchschleift Array und trennen Sie es in Gruppe ist Sound. Ich würde es auch gerne wissen. – sheriffderek

+0

Wenn Sie die JSON ändern können, ist hier eine andere Möglichkeit, es zu betrachten: https://ember-twiddle.com/185cc50643ed07201c88a15a42b00324?numColumns=2&openFiles=templates.components.menu-table.hbs%2Croutes.application.js – sheriffderek

+0

Die navigation table ist ein wirklich sub-content nav in der Mitte der Seite, mit entsprechenden Daten in einem benachbarten Div geladen werden. Es ist nicht das Hauptnavigationssystem. – user6041966

Antwort

1

Erster Einsatz .reduce() Ihre Daten restrukturieren:

yourData.reduce((res,item) => { 
    if(!res[item.groupName]) { 
    res[item.groupName] = [] 
    } 
    res[item.groupName].push(item.item); 
    return res; 
}, {}); 

Tun Sie dies in einer berechneten Eigenschaft.

{ 
    "Group 1": [ 
    "item1", 
    "item2" 
    ], 
    "Group 2": [ 
    "item1", 
    "item2" 
    ] 
} 

Nun ist es leicht, die gewünschten Daten zu erzeugen:

Dies wird eine bessere Struktur erzeugen

{{#each-in data as |group items|}} 
    <tbody> 
    <tr class="headerRow"><td>{{group}}</td></tr> 
    {{#each items as |item|}} 
     <tr><td>{{item}}</td></tr> 
    {{/each}} 
    </tbody> 
{{/each-in}} 
Verwandte Themen