El valor por defecto para una plantilla de marcador de posición Handlebars`

votos
17

¿Puedo especificar un valor predeterminado para una plantilla de marcador de posición Handlebars`?

<script type=x-handlebars-template id=menu-edit-form-tpl>
    <form method=`method` action=`action` class=menu-edit-form>
...                     
    </form>
</script>

¿Puedo especificar valores por defecto para `` method` y action y saltar en el objeto que se pasa a la plantilla compilado?

Publicado el 01/09/2014 a las 08:46
fuente por usuario
En otros idiomas...                            


4 respuestas

votos
28

Manillar no tiene "valores por defecto".
Debe utilizar `if`la declaración para comprobar propiedad se establece.

<script type="x-handlebars-template" id="menu-edit-form-tpl">
    <form method="`if method``method``else`POST{{/if}}" action="`if action``action``else`/{{/if}}" class="menu-edit-form">
...
    </form>
</script>

O si desea una sintaxis poco más limpia, los auxiliares de simple:

Handlebars.registerHelper('safeVal', function (value, safeValue) {
    var out = value || safeValue;
    return new Handlebars.SafeString(out);
});

lo que le permite escribir así:

<script type="x-handlebars-template" id="menu-edit-form-tpl">
    <form method="{{safeVal method 'POST'}}" action="{{safeVal action '/'}}" class="menu-edit-form">
...
    </form>
</script>
Respondida el 04/09/2014 a las 05:36
fuente por usuario

votos
2

Puede registrar un helperMissingauxiliar que se llamará cuando un valor se define en la plantilla, pero no en su contexto (útil si no desea que los valores que faltan a fallar en silencio):

Handlebars.registerHelper("helperMissing", function(context, options) {
    console.error("Template defines {{" + context.name + "}}, but not provided in context");
    return "{{" + context.name + "}}";
});
Respondida el 25/05/2015 a las 09:55
fuente por usuario

votos
3

Aquí está mi solución simple

Primero creamos un ayudante muy básico llamado 'elegir'

    Handlebars.registerHelper('choose', function (a, b) {return a ? a : b;});

a continuación, la usamos en la plantilla :)

<p>
{{choose valueFromData 'default-value-in-template'}}
<p>

o, por supuesto que podemos hacer

    <p>
    `choose valueFromData defaultValueFromData`
    <p>

Así, en su caso:

<form method="{{choose method 'get'}}" action="{{choose action 'action.php'}}" class="menu-edit-form">
...                     
    </form>

Espero que ayuda a otra persona ya que esto es a partir de 2014 :)

Respondida el 26/05/2016 a las 07:59
fuente por usuario

votos
2

Esta pregunta y su respuesta aceptada son bastante viejo y un montón de nuevas características y funcionalidades se han añadido al manillar ya que fueron escritos.

Me las arreglé para conseguir la funcionalidad de los valores predeterminados mediante bloques parciales que fueron lanzados en v4.0.0 - para que su plantilla podría terminar pareciéndose a esto:

<script type="x-handlebars-template" id="menu-edit-form-tpl">
    <form method="{{#> method}}get{{/method}}" action="{{#> action}}index.php{{/action}}" class="menu-edit-form">
...                     
    </form>
</script>

Entonces es sólo un caso de pasar en tu methody actioncomo parciales por hacer algo como esto:

var source = $('#menu-edit-form-tpl').html(),
    template = Handlebars.compile(source),
    html = template({}, {
        partials: {
            action: 'contact-form.php'
        }
    });

En el HTML resultante del método tomará por omisión gety la acción será contact-form.php- hice una pequeña demostración de esta encima en codepen: http://codepen.io/andyexeter/pen/LRpJag

Respondida el 11/09/2016 a las 11:27
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more