values not last item handlebars example handlebars.js

not - Handlebars.js Else If



handlebars js example (5)

Estoy usando Handlebars.js para la representación de la vista lateral del cliente. Si Else funciona bien, pero me he encontrado con un condicional de 3 vías que requiere ELSE IF:

Esto no funciona:

{{#if FriendStatus.IsFriend }} <div class="ui-state-default ui-corner-all" title=".ui-icon-mail-closed"><span class="ui-icon ui-icon-mail-closed"></span></div> {{else if FriendStatus.FriendRequested}} <div class="ui-state-default ui-corner-all" title=".ui-icon-check"><span class="ui-icon ui-icon-check"></span></div> {{else}} <div class="ui-state-default ui-corner-all" title=".ui-icon-plusthick"><span class="ui-icon ui-icon-plusthick"></span></div> {{/if}}

¿Cómo hago ELSE IF con manillares?


El espíritu del manillar es que es "sin lógica". A veces, esto nos hace sentir como si estuviéramos luchando con él, y otras veces terminamos con feos anidados si / else lógica. Podrías escribir un ayudante; muchas personas aumentan los manubrios con un operador condicional "mejor" o creen que debería ser parte del núcleo . Creo, sin embargo, que en lugar de esto,

{{#if FriendStatus.IsFriend}} <div class="ui-state-default ui-corner-all" title=".ui-icon-mail-closed"><span class="ui-icon ui-icon-mail-closed"></span></div> {{else}} {{#if FriendStatus.FriendRequested}} <div class="ui-state-default ui-corner-all" title=".ui-icon-check"><span class="ui-icon ui-icon-check"></span></div> {{else}} <div class="ui-state-default ui-corner-all" title=".ui-icon-plusthick"><span class="ui-icon ui-icon-plusthick"></span></div> {{/if}} {{/if}}

es posible que desee organizar las cosas en su modelo para que pueda tener esto,

{{#if is_friend }} <div class="ui-state-default ui-corner-all" title=".ui-icon-mail-closed"><span class="ui-icon ui-icon-mail-closed"></span></div> {{/if}} {{#if is_not_friend_yet }} <div class="ui-state-default ui-corner-all" title=".ui-icon-check"><span class="ui-icon ui-icon-check"></span></div> {{/if}} {{#if will_never_be_my_friend }} <div class="ui-state-default ui-corner-all" title=".ui-icon-plusthick"><span class="ui-icon ui-icon-plusthick"></span></div> {{/if}}

Solo asegúrate de que solo una de estas banderas sea cierta. Lo más probable es que, si está utilizando esto if/elsif/else en su opinión, probablemente lo esté utilizando en otro lugar también, por lo que estas variables podrían no ser superfluas.

Mantenlo delgado.


Escribí este simple ayudante:

Handlebars.registerHelper(''conditions'', function (options) { var data = this; data.__check_conditions = true; return options.fn(this); }); Handlebars.registerHelper(''next'', function(conditional, options) { if(conditional && this.__check_conditions) { this.__check_conditions = false; return options.fn(this); } else { return options.inverse(this); } });

Es algo así como el patrón de Cadena de Responsabilidad en los manillares.

Ejemplo:

{{#conditions}} {{#next condition1}} Hello 1!!! {{/next}} {{#next condition2}} Hello 2!!! {{/next}} {{#next condition3}} Hello 3!!! {{/next}} {{#next condition4}} Hello 4!!! {{/next}} {{/conditions}}

No es otra cosa, pero en algunos casos puede ayudarte.


Los manillares admiten bloques {{else if}} partir de 3.0.0.

Manillares v3.0.0 o superior:

{{#if FriendStatus.IsFriend}} <div class="ui-state-default ui-corner-all" title=".ui-icon-mail-closed"><span class="ui-icon ui-icon-mail-closed"></span></div> {{else if FriendStatus.FriendRequested}} <div class="ui-state-default ui-corner-all" title=".ui-icon-check"><span class="ui-icon ui-icon-check"></span></div> {{else}} <div class="ui-state-default ui-corner-all" title=".ui-icon-plusthick"><span class="ui-icon ui-icon-plusthick"></span></div> {{/if}}

Sin embargo, antes de Handlebars v3.0.0, tendrá que definir un ayudante que maneje la lógica de bifurcación o anidar instrucciones if :

{{#if FriendStatus.IsFriend}} <div class="ui-state-default ui-corner-all" title=".ui-icon-mail-closed"><span class="ui-icon ui-icon-mail-closed"></span></div> {{else}} {{#if FriendStatus.FriendRequested}} <div class="ui-state-default ui-corner-all" title=".ui-icon-check"><span class="ui-icon ui-icon-check"></span></div> {{else}} <div class="ui-state-default ui-corner-all" title=".ui-icon-plusthick"><span class="ui-icon ui-icon-plusthick"></span></div> {{/if}} {{/if}}


Los manillares ahora admiten {{else if}} partir de 3.0.0. Por lo tanto, su código debería funcionar ahora.

Puede ver un ejemplo en "condicionales" (revisado ligeramente aquí con un {{else}} agregado:

{{#if isActive}} <img src="star.gif" alt="Active"> {{else if isInactive}} <img src="cry.gif" alt="Inactive"> {{else}} <img src="default.gif" alt="default"> {{/if}}

http://handlebarsjs.com/block_helpers.html


Usualmente uso este formulario:

{{#if FriendStatus.IsFriend}} ... {{else}} {{#if FriendStatus.FriendRequested}} ... {{else}} ... {{/if}}{{/if}}