¿Cómo puedo lograr un si / else en bigote.js?


Parece bastante extraño que no pueda imaginar cómo hacer esto con bigote. Es compatible?

Este es mi triste intento de intentarlo:

    {{#author}}
      {{#avatar}}
        <img src="{{avatar}}"/>
      {{/avatar}}
      {{#!avatar}}
        <img src="/images/default_avatar.png" height="75" width="75" />
      {{/avatar}}
    {{/author}}

Esto obviamente no está bien, pero la documentación no menciona nada como esto. La palabra "else" ni siquiera se menciona: (

También, ¿por qué el bigote está diseñado de esta manera? ¿Este tipo de cosas se consideran malas? ¿Está tratando de obligarme a establecer el valor predeterminado en el propio modelo? ¿Qué pasa con los casos en los que eso no es posible?

Author: ViniciusPires, 2011-05-17

3 answers

Así es como se hace if / else en Bigote (perfectamente soportado):

{{#repo}}
  <b>{{name}}</b>
{{/repo}}
{{^repo}}
  No repos :(
{{/repo}}

O, en su caso:

{{#author}}
  {{#avatar}}
    <img src="{{avatar}}"/>
  {{/avatar}}
  {{^avatar}}
    <img src="/images/default_avatar.png" height="75" width="75" />
  {{/avatar}}
{{/author}}

Busca secciones invertidas en los documentos: https://github.com/janl/mustache.js

 444
Author: Eneko Alonso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-11 19:34:28

Esto es algo que se resuelve en el "controlador", que es el punto de las plantillas sin lógica.

// some function that retreived data through ajax
function( view ){

   if ( !view.avatar ) {
      // DEFAULTS can be a global settings object you define elsewhere
      // so that you don't have to maintain these values all over the place
      // in your code.
      view.avatar = DEFAULTS.AVATAR;
   }

   // do template stuff here

}

Esto es en realidad mucho mejor que mantener url de imagen u otros medios que podrían o no cambiar en sus plantillas, pero toma un tiempo acostumbrarse. El punto es desaprender template tunnel visión, una url de avatar img está destinada a ser utilizada en otras plantillas, ¿va a mantener esa url en las plantillas X o en un único objeto de configuración PREDETERMINADA? ;)

Otra opción es hacer lo siguiente:

// augment view
view.hasAvatar = !!view.avatar;
view.noAvatar = !view.avatar;

Y en la plantilla:

{{#hasAvatar}}
    SHOW AVATAR
{{/hasAvatar}}
{{#noAvatar}}
    SHOW DEFAULT
{{/noAvatar}}

Pero eso va en contra de todo el significado de las plantillas sin lógica. Si eso es lo que quieres hacer, quieres plantillas lógicas y no debes usar bigote, aunque dale una oportunidad justa de aprender este concepto;)

 52
Author: BGerrissen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-05 17:16:47

Su else declaración debe tener este aspecto (tenga en cuenta la ^):

{{^avatar}}
 ...
{{/avatar}}

En bigote esto se llama 'Secciones invertidas'.

 14
Author: anonym,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-21 10:39:08