提问者:小点点

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


我在我的应用程序中使用带有车把模板的enpeer-cli。我需要将值从hanldebars模板传递给余烬控制器的计算property.Is余烬支持以任何方式将参数或车把模板中的任何值传递给余烬控制器的计算属性。谢谢你

我想做这样的事情:

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个答案

匿名用户

简而言之,你不能。Ember中的计算属性不是函数。Ember有一些语法糖,使它们更容易使用函数声明,但它们不是函数。你可以把Ember中的计算属性想象成Javascript中的计算属性:它们看起来像函数,但实际上不是。你不能将参数传入计算属性,因为它不是函数。

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

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

您可以在问题中完全使用该助手:

{{hasPermission value1 value2}}

匿名用户

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

但是,这段代码没有太大意义,因为权限不在模型中控制,它们应该在其他地方处理。