Ember js: как передать параметры вычисляемому свойству контроллера

Я использую ember-cli с шаблоном handlebars для моего приложения ember js. У меня есть требование передать значение из шаблона hanldebars в вычисляемое свойство контроллера ember. Есть ли способ, которым ember поддерживает передачу параметров или любого значения из шаблона handlebars в вычисляемое свойство контроллера ember . Спасибо

Я хочу сделать что-то вроде:

App.Person = Ember.Object.extend({

 hasPermission: function(value1, value2) {
 // setter
  if(value1 === value2){
    return "You are permitted";
  }else{
    return "You are not permitted";
  }

 }.property('hasPermission')
});

И из шаблона руля:

{{ hasPermission value1 value2 }}

Что-то вроде этого


person stackoverflow-user    schedule 18.03.2015    source источник
comment
Если возможно, приведите конкретный конкретный пример с использованием кода. Что такое вычисляемое свойство? На каком имуществе (ах) оно основано? Какой параметр вы пытаетесь передать? Наличие конкретного примера помогает каждому понять, о чем вы думаете, и подходят ли вычисленные свойства для того, что вы пытаетесь достичь. (Я не ожидал.)   -  person Chris Peters    schedule 18.03.2015
comment
возможный дубликат вычисляемых свойств Ember с аргументами   -  person Nelu    schedule 19.08.2015


Ответы (2)


Короткий ответ: вы не можете. Вычисляемые свойства в Ember - это не функции. В Ember есть некоторый синтаксический сахар, упрощающий их объявление с помощью функций, но это не функции. Вы можете думать о вычисленных свойствах в Ember как о вычисленных свойствах в Javascript: они выглядят как функции, но на самом деле это не так. Вы не можете передавать аргументы вычисляемому свойству, потому что это не функция.

При этом я думаю, что вам нужен помощник Handlebars. Вы можете передать свойства из своего контроллера и выполнить над ними вычисления, чтобы получить результат. Из вашего примера:

Ember.Handlebars.helper('hasPermission', function(value1, value2) {
    if (value1 === value2) {
        return 'You are permitted';
    } else {
        return 'You are not permitted';
    }
});

Вы можете использовать этого помощника именно так, как он у вас есть, в своем вопросе:

{{hasPermission value1 value2}}
person GJK    schedule 18.03.2015

Чтобы использовать ответ @GJK, приведенный выше, вы можете сделать это с помощью вычисленных свойств, но вам также понадобятся другие свойства модели:

App.Person = Ember.Object.extend({
  value1: 'foo',
  value2: 'bar',
  hasPermission: function() {
    if (this.get('value1') === this.get('value2') {
      return "You are permitted";
    } else {
      return "You are not permitted";
    }
  }.property('value1', 'value2')
});

Этот код не имеет большого смысла, однако, поскольку разрешения не контролируются в моделях, их следует обрабатывать где-то еще.

person mpowered    schedule 18.03.2015