我的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 }}
喜欢它的东西
答案 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')
});
这段代码并没有多大意义,因为权限不受模型控制,应该在其他地方处理。