varias else condiciones if-statement meteor equals conditional-statements spacebars

if-statement - condiciones - if else php



¿Comprobar la igualdad en las barras espaciales? (3)

Estoy tratando de hacer lo que creo que debería ser una tarea muy simple, pero no lo he hecho en la última hora. Quiero seleccionar una opción de selección de forma predeterminada si la propiedad del usuario coincide con el valor.

<select name="myName"> {{#each addKeys myTable}} <!-- addKeys creates variables for keys and values --> <option value="{{key}}" {{#if currentUser.property === key}}selected="selected"{{/if}}>{{value}}</option> {{/each}} </select>

Ahora pensé que esto era lo suficientemente sencillo como para ser implementado. Pero resulta que las barras espaciales no permiten operadores condicionales que no sean el signo de exclamación de negación, por lo que los signos iguales están fuera de discusión. Entonces intenté algo horrible por intentarlo:

En la plantilla myTemplate :

<select name="myName"> {{#each addKeys myTable}} <option value="{{key}}" {{isSelected currentUser.property key}}>{{value}}</option> {{/each}} </select>

En mytemplate.js :

Template.myTemplate.helpers({ isSelected: function(v1, v2) { if (v1 === v2) return "selected=/"selected/""; return ''''; } });

Este código no solo es terrible, sino terrible, no funciona:

Exception in Meteor UI: String contains an invalid character

No entiendo por qué algo tan simple parece tan imposible de lograr. ¿Me estoy perdiendo algo allí?


Aquí hay una descripción general de {{#if}} declaraciones en las {{#if}}

Propiedad

Por supuesto, la implementación más simple posible es cuando el objeto con ámbito tiene una propiedad que se evalúa como un booleano.

Por ejemplo si tuvieras:

var item = { text: ''hello'', checked: false };

Entonces podrías evaluar un bloque if como este:

class="{{#if checked}}checked{{/if}}"

Función

También podríamos evaluar una función aquí. En lugar de agregar una función al elemento, podemos agregar una función al ayudante y heredará el contexto de datos del elemento que se le pasa. Así que si tuviéramos el siguiente ayudante:

Template.item.helpers({ saysHi: function() { return this.text === "hi"; } });

Entonces podríamos ejecutar el siguiente código:

<template name="item"> {{text}} {{#if saysHi}} - Hi Back {{/if}} </template>

Note : la implementación del ayudante puede acceder al contexto de datos actual de this .

Función con parámetros

También puede pasar cualquier número de parámetros a funciones de ayuda como esta:

Plantilla: {{frob abc verily=true}}
Llamada de frob(a, b, c, Spacebars.kw({verily: true})) : frob(a, b, c, Spacebars.kw({verily: true}))

Cuando se aplica a nuestro bloque if, podemos hacer lo siguiente:

{{#if equals owner currentUser._id}} <button class="delete">&times;</button> {{/if}}

A continuación, agregue equals a nuestro ayudante de plantilla de esta manera:

Template.item.helpers({ equals: function(v1, v2) { return (v1 === v2); } });

Ayudantes universales

Dado que este es un método genérico que podría ser útil en cualquier lugar, deberíamos agregarlo a cada plantilla en lugar de recrearlo.

Note : para crear un ayudante que pueda usarse en cualquier plantilla, use Template.registerHelper .

Template.registerHelper(''equals'', function(v1, v2) { return (v1 === v2); } );

Aquí hay una demostración de trabajo en MeteorPad que incluye uno de cada uno de los tipos de IF construidos aquí.


Aunque las barras espaciales no admiten la igualdad, este método funciona para verificar la igualdad

puedes usar algo como esto

{{#if chkeq variable value}}

ejemplo

{{#if chkeq applicationStatus "Draft"}}

al menos me funcionó

donde chkeq es un ayudante global, que es algo como esto

chkeq:function(a,b){ if(a==b){ return true;} else return false; }