javascript - seguridad - ¿Cómo accedo a un elemento de la matriz de acceso por índice en el manillar?
protección basada en el lenguaje (8)
La siguiente sintaxis también se puede usar si la matriz no tiene nombre (solo la matriz se pasa a la plantilla):
<ul id="luke_should_be_here">
{{this.1.name}}
</ul>
Estoy intentando especificar el índice de un elemento en una matriz dentro de una plantilla de manillares:
{
people: [
{"name":"Yehuda Katz"},
{"name":"Luke"},
{"name":"Naomi"}
]
}
usando esto:
<ul id="luke_should_be_here">
{{people[1].name}}
</ul>
Si lo anterior no es posible, ¿cómo escribiría un ayudante que pudiera acceder a un elemento específico dentro de la matriz?
Lo siguiente, con un punto adicional antes del índice , funciona como se esperaba. Aquí, los corchetes son opcionales cuando el índice es seguido por otra propiedad:
{{people.[1].name}}
{{people.1.name}}
Sin embargo, los corchetes son obligatorios en:
{{#with people.[1]}}
{{name}}
{{/with}}
En este último, el uso del número de índice sin los corchetes obtendría uno:
Error: Parse error on line ...:
... {{#with people.1}}
-----------------------^
Expecting ''ID'', got ''INTEGER''
Como nota al margen: los corchetes (también) se utilizan para la sintaxis literal del segmento , para referirse a los identificadores reales (no a los números de índice) que de otro modo no serían válidos. Más detalles en ¿Qué es un identificador válido?
(Probado con manillares en YUI.)
2.xx actualización
Ahora puedes usar el asistente de ayuda para esto:
(get people index)
aunque si obtiene un error sobre el índice que necesita ser una cadena, haga:
(get people (concat index ""))
Mientras realiza un bucle en una matriz con each
y si desea acceder a otra matriz en el contexto del elemento actual, hágalo de esta manera.
Aquí están los datos de ejemplo.
[ { name: ''foo'', attr: [ ''boo'', ''zoo'' ] }, { name: ''bar'', attr: [ ''far'', ''zar'' ] } ]
Aquí está el manillar para obtener el primer elemento en la matriz attr
.
{{#each player}} <p> {{this.name}} </p> {{#with this.attr}} <p> {{this.[0]}} </p> {{/with}} {{/each}}
Esto dará salida
<p> foo </p> <p> boo </p> <p> bar </p> <p> far </p>
Por favor, intente esto, si desea buscar primero / último.
{{#each list}}
{{#if @first}}
<div class="active">
{{else}}
<div>
{{/if}}
{{/each}}
{{#each list}}
{{#if @last}}
<div class="last-element">
{{else}}
<div>
{{/if}}
{{/each}}
Prueba esto:
<ul id="luke_should_be_here">
{{people.1.name}}
</ul>
Si las características no documentadas no son su juego, lo mismo se puede lograr aquí:
Handlebars.registerHelper(''index_of'', function(context,ndx) {
return context[ndx];
});
Luego en una plantilla
{{#index_of this 1}}{{/index_of}}
Escribí lo anterior antes de que me apoderara de
this.[0]
No puedo ver a uno ir demasiado lejos con el manillar sin escribir tus propios ayudantes.
Si quieres utilizar variables dinámicas.
Esto no funcionará:
{{#each obj[key]}}
...
{{/each}}
Necesitas hacer:
{{#each (lookup obj key)}}
...
{{/each}}
ver el ayudante de búsqueda de manillares y las subexpresiones de manillares .
{{#each array}}
{{@index}}
{{/each}}