Подтвердить что ты не робот

Проверьте, чтобы значение равно значению в Ember Handlebar. Если вспомогательный блок

Как проверить равенство значений в ember.js Вспомогательный блок if?

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

Как мы выполняем выше в дескрипторах?

4b9b3361

Ответ 1

Помощник {{#if}} может тестировать только свойства, а не произвольные выражения. Поэтому самое лучшее, что можно сделать в таких случаях, - написать свойство, вычисляющее все условные условия, которые вы хотите проверить.

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

Тогда do {{#if personIsJohn}}.

Примечание. Если вы считаете это слишком ограничивающим, вы также можете зарегистрировать своего более мощного помощника if.

Ответ 2

Используйте Ember.Component, чтобы избежать повторного определения вычисленных свойств в ваших классах (например, personIsJohn выше):

// 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}}

Вы можете определить другую часть сравнения с помощью App.ElseEqualComponent:

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

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

Использование:

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

Ответ 3

Если вы используете HTMLBars (Ember version 1.10+), вы можете использовать аддон Ember Truth Helper:

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

После установки он будет таким же простым, как это:

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

Ответ 4

хотя эта проблема может быть решена с помощью eq helper, написав

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

но для общего решения вы можете создать свой собственный помощник, который будет принимать три параметра param[0] и param[2] как операнд, а param[1] - оператор. Ниже представлен вспомогательный файл.

compare.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);

теперь вы можете легко использовать его для нескольких целей.

для проверки равенства.

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

для большей проверки.

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

и т.д.

Ответ 5

Развернув ответ на Jo Liss, вы можете сделать это, используя макрос вычисленного свойства для более сжатого и читаемого кода.

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

становится

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

Relavent Docs.