it-swarm.com.de

Wie kann ich auf ein Zugriffs-Array-Element nach Index in den Lenkern zugreifen?

Ich versuche, den Index eines Elements in einem Array in einer Lenkervorlage anzugeben:

{
  people: [
    {"name":"Yehuda Katz"},
    {"name":"Luke"},
    {"name":"Naomi"}
  ]
}

mit diesem:

<ul id="luke_should_be_here">
{{people[1].name}}
</ul>

Wenn das Obige nicht möglich ist, wie schreibe ich einen Helfer, der auf ein bestimmtes Element innerhalb des Arrays zugreifen könnte?

243
lukemh

Versuche dies:

<ul id="luke_should_be_here">
{{people.1.name}}
</ul>
372
dhorrigan

Das folgende, mit einem zusätzlichen Punkt vor dem Index, funktioniert genau wie erwartet. Hier sind die eckigen Klammern optional, wenn auf den Index eine andere Eigenschaft folgt:

{{people.[1].name}}
{{people.1.name}}

Die eckigen Klammern sind jedoch required in:

{{#with people.[1]}}
  {{name}}
{{/with}}

Im letzteren Fall würde die Verwendung der Indexnummer ohne die eckigen Klammern eine erhalten:

Error: Parse error on line ...:
...     {{#with people.1}}                
-----------------------^
Expecting 'ID', got 'INTEGER'

Nebenbei: Die Klammern werden (auch) für Segment-Literal-Syntax verwendet, um auf tatsächliche Bezeichner (nicht Indexnummern) zu verweisen, die ansonsten ungültig wären. Weitere Details in Was ist eine gültige Kennung?

(Mit Lenkern in YUI getestet.)

2.xx Update

Sie können jetzt den Helper get dafür verwenden:

(get people index)

wenn Sie jedoch eine Fehlermeldung erhalten, dass der Index eine Zeichenfolge sein muss, führen Sie Folgendes aus:

(get people (concat index ""))
291
Arjan
{{#each array}}
  {{@index}}
{{/each}}
16
FMQB

Wenn undokumentierte Funktionen nicht Ihr Spiel sind, können Sie hier dasselbe tun:

Handlebars.registerHelper('index_of', function(context,ndx) {
  return context[ndx];
});

Dann in einer Vorlage

{{#index_of this 1}}{{/index_of}}   

Ich habe das oben geschrieben, bevor ich es bekam 

this.[0]

Ich kann nicht sehen, dass man mit dem Lenker zu weit kommt, ohne eigene Helfer zu schreiben.

15
Bret Weinraub

Wenn Sie dynamische Variablen verwenden möchten

Das funktioniert nicht:

{{#each obj[key]}}
...
{{/each}}

Sie müssen tun:

{{#each (lookup obj key)}}
...
{{/each}}

siehe - Lenker - Lookup - Helper und Lenkerausdrücke .

8
julesbou

Wenn Sie mit each in einem Array eine Schleife bilden und wenn Sie im Kontext des aktuellen Elements auf ein anderes Array zugreifen möchten, machen Sie es so.

Hier sind die Beispieldaten.

 [
 {
 Name: 'foo', 
 attr: ['boo', 'Zoo'] 
 }, 
 {
 name: 'bar', 
 attr: ['far', 'zar'] 
 } 
] 

Hier ist die Lenkstange, um das erste Element im attr-Array abzurufen.

{{#jeder Spieler}}
 <p> {{this.name}} </ p> 

 {{#with this.attr}} 
 <p> {{this. [0]}} </ p> 
 {{/mit jedem}}

Dies wird ausgegeben

 <p> foo </ p> 
 <p> boo </ p> 

 <p> bar </ p> 
 <p> weit </ p> 
7
Fatih

Bitte versuchen Sie es, wenn Sie zuerst/zuletzt abrufen möchten.

{{#each list}}

    {{#if @first}}
        <div class="active">
    {{else}}
        <div>
    {{/if}}

{{/each}}


{{#each list}}

    {{#if @last}}
        <div class="last-element">
    {{else}}
        <div>
    {{/if}}

{{/each}}
6
user1378423

Die folgende Syntax kann auch verwendet werden, wenn das Array nicht benannt wird (nur das Array wird an die Vorlage übergeben):

  <ul id="luke_should_be_here">
  {{this.1.name}}
  </ul>
0
José

In meinem Fall wollte ich auf ein Array in einem benutzerdefinierten Helfer zugreifen.

{{#ifCond arr.[@index] "foo" }}

Was nicht funktioniert hat, aber die von @julesbou vorgeschlagene Antwort hat funktioniert. 

Arbeitscode:

{{#ifCond (lookup arr @index) "" }}

Hoffe das hilft! Prost.

0
Sharukh Mastan