51 votes

Vérification d'une valeur égale à dans l'aide du bloc Ember Handlebar If

Comment vérifier l'égalité des valeurs dans ember.js de l'aide If-block ?

{{#if person=="John"}}

Comment réaliser les performances ci-dessus dans le guidon ?

0 votes

Il y a aussi une réponse à cette question dans Opérateur logique dans une conditionnelle {{#if}} de handlebars.js

77voto

Jo Liss Points 6692

En {{#if}} ne peut tester que les propriétés, et non les expressions arbitraires. La meilleure chose à faire dans des cas comme celui-ci est donc d'écrire une propriété calculant la conditionnelle que vous voulez tester.

personIsJohn: function() {
  return this.get('person') === 'John';
}.property('person')

Ensuite, faites {{#if personIsJohn}} .

Note : Si vous trouvez cette méthode trop contraignante, vous pouvez également enregistrez votre propre plus puissant if aide .

0 votes

@JoLiss Pouvez-vous passer une expression arbitraire dans la propriété calculée à partir du modèle ?

0 votes

Non, les propriétés calculées ne peuvent pas prendre d'arguments. Vous devrez donc créer une CP distincte pour chaque valeur que vous souhaitez tester : personIsJohn , personIsMike , ... Ou enregistrez un nouveau if -comme une aide -- voir mon édition ci-dessus.

0 votes

Bonne réponse. Il faudrait vraiment qu'ils mettent ça dans les guidons.

26voto

Panagiotis Panagi Points 4986

Utilisez un Ember.Component Ainsi, vous éviterez de définir de manière répétitive des propriétés calculées dans vos classes (comme par exemple personIsJohn ci-dessus) :

// if_equal_component.js script
App.IfEqualComponent = Ember.Component.extend({
  isEqual: function() {
    return this.get('param1') === this.get('param2');
  }.property('param1', 'param2')
});

// if-equal.handlebars template
{{#if isEqual}}
  {{yield}}
{{/if}}

Vous pouvez définir l'autre partie de la comparaison, avec une balise App.ElseEqualComponent :

// else_equal_component.js script
App.ElseEqualComponent = App.IfEqualComponent.extend();

// else-equal.handlebars template
{{#unless isEqual}}
  {{yield}}
{{/unless}}

Utilisation :

{{#if-equal param1=person param2="John"}}
  Hi John!
{{/if-equal}}
{{#else-equal param1=person param2="John"}}
  Who are you?
{{/else-equal}}

23voto

Johnny Oshika Points 15580

Si vous utilisez les barres HTML (version 1.10+ d'Ember), vous pouvez alors utiliser la fonction Aide à la vérité d'Ember addon :

https://github.com/jmurphyau/ember-truth-helpers

Une fois installé, ce sera aussi simple que ça :

{{#if (eq person "John")}} hello {{/if}}

10voto

Nitin9791 Points 34

Bien que ce problème puisse être résolu en utilisant l'aide eq en écrivant

{{#if (eq person "John")}} hello {{/if}}

mais pour une solution générale, vous pouvez créer votre propre aide qui prendra trois paramètres param[0] y param[2] étant l'opérande et param[1] étant opérateur. Voici le fichier d'aide.

comparer.js

import Ember from 'ember';

export function compare(params) {
  if(params[3]){  //handle case insensitive conditions if 4 param is passed.
    params[0]= params[0].toLowerCase();
    params[2]= params[2].toLowerCase();
  }
  let v1 = params[0];
  let operator = params[1];
  let v2 = params[2];
  switch (operator) {
    case '==':
      return (v1 == v2);
    case '!=':
      return (v1 != v2);
    case '===':
      return (v1 === v2);
    case '<':
      return (v1 < v2);
    case '<=':
      return (v1 <= v2);
    case '>':
      return (v1 > v2);
    case '>=':
      return (v1 >= v2);
    case '&&':
      return !!(v1 && v2);
    case '||':
      return !!(v1 || v2);
    default:
      return false;
  }
}

export default Ember.Helper.helper(compare);

Vous pouvez maintenant l'utiliser facilement à des fins multiples.

pour le contrôle de l'égalité.

{{#if (compare person '===' 'John')}} {{/if}}

pour une meilleure vérification.

{{#if (compare money '>' 300)}} {{/if}}

et ainsi de suite.

4voto

WMeldon Points 345

En développant la réponse de Jo Liss, vous pouvez maintenant le faire en utilisant une macro de propriété calculée pour un code plus concis et plus lisible.

personIsJohn: function() {
  return this.get('person') === 'John';
}.property('person')

devient

personIsJohn: Ember.computed.equal('person', 'John')

Docs relatifs .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X