Ember js:如何将参数传递给控制器​​计算属性

时间:2015-03-18 12:31:26

标签: ember.js handlebars.js ember-cli

我的ember js应用程序使用带有把手模板的ember-cli。我需要将值从hanldebars模板传递给ember控制器的计算属性。有没有什么方法ember支持将把手模板中的参数或任何值传递给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 }}

喜欢它的东西

2 个答案:

答案 0 :(得分:16)

简短的回答是,你不能。 Ember中的计算属性是函数。 Ember有一些语法糖,使它们更容易使用函数声明,但它们不是函数。您可以将Ember中的计算属性看作Javascript中的计算属性:它们看起来像函数,但它们不是。您不能将参数传递给计算属性,因为它不是函数。

话虽如此,我认为你想要的是Handlebars helper。您可以从控制器传入属性并对其执行计算以获得结果。从你的例子:

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

您可以在问题中使用该助手的具体方式:

{{hasPermission value1 value2}}

答案 1 :(得分:1)

要建立@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')
});

这段代码并没有多大意义,因为权限不受模型控制,应该在其他地方处理。