mustache.js si apoyar tal juicio de expresión?

mustache.js si admitir tal expresión? -> {{type == "a"}}

¿Como lo hago?

Bigote:

{{#items}}
  {{type == "a"}} 
    <li>{{name}} {{type}}</li>
  {{/link}}
  {{type == "b"}} 
    <strong>{{name}} {{type}}</strong>
  {{type == "c"}} 
    <span>{{name}} {{type}}</span>
  {{/link}}
{{/items}}

JSON:

{
  "header": "Colors",
  "items": [
      {"name": "red", "type": "a", "url": "#Red"},
      {"name": "green", "type": "b", "url": "#Green"},
      {"name": "blue", "type": "c", "url": "#Blue"}
  ],
  "empty": false
}

quiero Salida:

<li>red a</li>
<strong>green b</strong>
<span>blue c</span>

preguntado el 12 de junio de 12 a las 09:06

1 Respuestas

No puedes porque Moustache no tiene lógica.

La mejor práctica es cambiar su JSON de entrada de tal manera que la 'lógica' ya esté incluida en la entrada. Algo como:

{
  "header": "Colors",
  "items": [
      {"a": {"name": "red", "url": "#Red"}},
      {"b": {"name": "green", "url": "#Green"}},
      {"c": {"name": "blue", "url": "#Blue"}}
  ],
  "empty": false
}

Entonces:

{{#items}}
  {{#a}}
    <li>{{name}} {{type}}</li>
  {{/a}}
  {{#b}}
    <strong>{{name}} {{type}}</strong>
  {{/b}}
  {{#c}}
    <span>{{name}} {{type}}</span>
  {{/c}}
{{/items}}

Produciría lo que querías.

EDITAR De alguna manera no pude hacer que el ejemplo anterior funcionara. Estoy usando Hogan (una versión de bigote mantenida por Twitter que es más rápida y tiene un par de cosas adicionales que puedes hacer con él, asegúrate de revisarlo) pero estoy bastante seguro de que no tiene nada. que ver con el hecho de que las cosas anteriores deberían funcionar.

De todos modos, podría hacer que lo siguiente funcione en la página de demostración proporcionada, que se acerca más al ejemplo original y logra el resultado que deseaba. Nota general: puede verificar la existencia de un campo (por ejemplo, usando {{#isa}}) pero no puede tener ninguna otra lógica en las etiquetas.

{{#items}}
  {{#isa}}
   <li><strong>{{name}}</strong></li>
  {{/isa}}
  {{#isb}}
   <li><a href="{{url}}">{{name}}</a></li>
  {{/isb}}
  {{#isc}}
    <li><span href="{{url}}">{{name}}</span ></li>
  {{/isc}}
{{/items}}

JSON

{
  "header": "Colors",
  "items": [
      {"name": "red", "isa": true, "url": "#Red"},
      {"name": "green", "isb": true, "url": "#Green"},
      {"name": "blue", "isc": true, "url": "#Blue"}
  ],
  "empty": false
}

hth

Respondido el 13 de junio de 12 a las 12:06

gracias, ¿sabes qué motor de plantilla admite la expresión juicio? Y no entiendo por qué "Bigote" se hizo sin lógica, inconveniente de usar, ¿de qué sirve? - justin wong

En cuanto al por qué: stackoverflow.com/questions/3896730/… .. Habiendo dicho eso, incluso sin lógica Moustache es realmente poderoso, cuando llegas a usarlo. Por ejemplo, es perfectamente legal tener una función en su json para ser llamada por referencia en Moustache. Ahora, si esa función fuera hacer algo con los otros datos en el json, rápidamente te das cuenta de que funciona muy bien. - Geert-Jan

gracias, de acuerdo con su declaración, lo intento aquí:bigote.github.com/#demo el porqué {{name}} {{type}} salida nada? - justin wong

Algunas cosas divertidas están pasando con esa demostración. No puedo hacer que el código copiado y pegado funcione. ver mi respuesta actualizada. - Geert-Jan

¡Gracias! Por favor, ayuda para ver este problema. stackoverflow.com/questions/11010958/… - justin wong

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.