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">×</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;
}
Prueba esto:
En su plantilla:
<option value={{key}} selected={{isSelected currentUser.property key}}>
Luego haz que tu ayudante devuelva un booleano.
Más sobre el tema aquí: https://github.com/meteor/meteor/wiki/Using-Blaze#conditional-attributes-with-no-value-eg-checked-selected