制作Ember计算属性取决于变量

时间:2014-07-23 07:40:08

标签: ember.js

假设我在视图上有一个计算属性:

TestView=Ember.View.extend({
  computedProperty:function(){
    return this.get("elementId")+"test"
  }.property("targetObject.{{elementId goes here}}")
})

我想让属性依赖于model属性,其属性名称等于该view元素的id。但是,我还没有找到一种优雅的方法来做到这一点。我需要这样做才能使我的代码尽可能通用。到目前为止,我的解决方案是使属性依赖于targetObject的id,然后在需要绑定更新时调用object.notifyPropertyChange(id)。

增加一些清晰度。假设我有一个视图,显示绑定到模型上的属性的数字。但是,我希望在显示时用逗号格式化数字。我可以轻松地为每个可能进行格式化的属性编写一个计算属性。相反,我只想要一个通用视图,它将知道采用与视图的elementId属性同名的模型属性的值。这是我的hacky解决方案的一个例子:

TestView=Ember.View.extend({
  computedProperty:function(){
  var id=this.get("elementId")
    return addCommas(this.get("targetObject").get(id))
  }.property("id")
})
然后我打电话给:     object.notifyPropertyChange(id)只要模型上的某个属性发生更改。它有效并实现了我的目标,但我一直在寻找更优雅的解决方案。

在视图中,格式化的值显示在自定义文本字段中。

{{view App.CustomTextField value=computedProperty id="someAttribute}}

1 个答案:

答案 0 :(得分:0)

只需使用一个帮助器,用逗号分隔数字。您不需要任何属性,计算或其他。

<强> test.hbs

Hello, I am a formatted {{add-commas number}}.

<强>助手/附加commas.js

Ember.Handlebars.helper('add-commas', function(value) {
  return value.toLocaleString();
});