2013-08-11 11 views
13

Sagen, ich habe JSON:Wie erhalten Sie einen Array-Wert am Index mit Lenker.js?

{ 
userinput: [ 
    {name: "brian", "value": "i like pies"}, 
    {name: "susan", "value": "memes are stupid"} 
], 
feedback: [ 
    {value: "i also like pies"}, 
    {value: "null"} 
] 
} 

Und ich versuche, eine Tabelle wie folgt zu zeichnen:

name ..... | input ...... | feedback 
-----------|----------------|----------------- 
brian  | I like pies | I also like pies 
susan  | mems are stupid| null 

Und während ich erkennen, dass es besser wäre, Feedback als Wert "zu haben userinput ", was ich habe ist nicht so gemacht ...

Ich versuche, den Index der Rückmeldung innerhalb {{#each userinput}}`, z

{{#each userinput}} 
<td>{{name}}</td><td>{{value}}</td><td>{{../feedback[@index].value}}</td> 
{{/each}} 

Aber natürlich funktioniert {{../feedback[@index].value}} nicht.

Was ist der beste Weg (ohne die Struktur des JSON zu ändern), den Wert des passenden Index innerhalb des Feedback-Arrays zu erfassen?

+0

Hey frumbert, ich bemerkt, dass Sie keine Antwort ausgewählt haben. Ich wollte nur darauf hinweisen, dass, während @Rubens Mariuzzo nicht für mich arbeitete, [Nickgraefs Antwort] (http://Stackoverflow.com/a/32640060/923817) tat. –

+1

@ D.Tate zu dem Zeitpunkt konnte ich Lenker nicht aktualisieren, da es einige Javascript-Techniken verwendet, die zu neu für die Javascript-Server-Side-Engine waren, die ich verwendete; Die Version, die ich damals hatte, enthielt keine Suchhilfe/Methode und hat etwas wie http://stackoverflow.com/a/18169209/1238884 getan. – frumbert

Antwort

3

Ich denke, Sie müssen einen Block Helfer dafür schreiben, wie es scheint, @index kann nur als Standalone verwendet werden.

Ich modifizierte die "list" example, um eine Vorlage wie folgt zu ermöglichen: "{{#list userinput feedback}}<td>{{name}}</td><td>{{value}}</td><td>{{@feedback.value}}</td>{{/list}}". Die Implementierung ist so und akzeptiert zwei Parameter "Eingabe" und "Feedback" (plus die Standard "Optionen").

Handlebars.registerHelper('list', function(input, feedback, options) { 
    var out = "", data; 

    // iterate over the input 
    for (var i=0; i<input.length; i++) { 
    if (options.data) { 
     data = Handlebars.createFrame(options.data || {}); 

     // add "feedback" item to the current frame's data 
     data.feedback = feedback[i]; 
    } 

    out += "<tr>" + options.fn(input[i], { data: data }) + "</tr>"; 
    } 

    return out; 
}); 

Here's the Fiddle.

14

Diese the lookup helper Verwendung erreicht werden kann:

Der lookup Helfer ermöglicht dynamische Parameter Auflösung Lenker Variablen. Dies ist nützlich zum Auflösen von Werten für Array-Indizes.

So ist die Vorlage für Ihr Beispiel würde wie folgt aussehen:

{{#each userinput}} 
    <td>{{name}}</td> 
    <td>{{value}}</td> 
    <td> 
     {{#with (lookup ../feedback @index)}} 
      {{value}} 
     {{/with}} 
    </td> 
{{/each}} 
+1

Dies scheint die beste Antwort zu sein! Funktioniert gut für mich! Danke @nickgraef. – Marc

+0

Dies ist die beste Antwort. Klappt wunderbar. – ChrisRich

Verwandte Themen