¿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?
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
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;)
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'.
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