Ember.js 使余烬计算属性依赖于变量

Ember.js 使余烬计算属性依赖于变量,ember.js,Ember.js,假设我在视图上有一个计算属性: TestView=Ember.View.extend({ computedProperty:function(){ return this.get("elementId")+"test" }.property("targetObject.{{elementId goes here}}") }) 我想让属性依赖于model属性,该属性的属性名相当于该视图元素上的id。然而,我还没有找到一个优雅的方法来做到这一点。我需要这样做,使我的代码尽可能通用。

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

TestView=Ember.View.extend({
  computedProperty:function(){
    return this.get("elementId")+"test"
  }.property("targetObject.{{elementId goes here}}")
})
我想让属性依赖于model属性,该属性的属性名相当于该视图元素上的id。然而,我还没有找到一个优雅的方法来做到这一点。我需要这样做,使我的代码尽可能通用。到目前为止,我的解决方案是使属性依赖于targetObject的id,然后在需要绑定更新时调用object.notifyPropertyChange(id)

增加一些清晰度。假设我有一个视图,其中显示一个绑定到模型上某个属性的数字。但是,我希望数字在显示时用逗号格式化。我可以很容易地为每个可能进行格式化的属性编写一个计算属性。但是,我只需要一个通用视图,它将知道使用与视图的elementId属性同名的模型属性值。以下是我的黑客解决方案的一个示例:

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

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

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

只需使用一个用逗号格式化数字的助手。您不需要任何属性,计算或其他

测试hbs

Hello, I am a formatted {{add-commas number}}.
Ember.Handlebars.helper('add-commas', function(value) {
  return value.toLocaleString();
});
帮助程序/addcommas.js

Hello, I am a formatted {{add-commas number}}.
Ember.Handlebars.helper('add-commas', function(value) {
  return value.toLocaleString();
});

你能提供更多的背景吗?我不确定你想达到什么目的。视图的id在渲染后不会更改。视图中定义的属性已封装在其实例中。您可能需要在视图初始化中手动添加观察者。我有一些视图元素,它们的ID是模型的属性名。我希望每个视图上的属性依赖于与该视图id同名的属性,但我不希望在.property中显式命名该属性(属性名称在此处)。相反,我想通过编程来设置它。我仍然有点不明白你在问什么。我制作了这个fiddle,,它会在具有相同id名称的属性发生更改时更新视图中的属性。没有在视图中显式定义属性名称。这就是你想要的吗?这正是我想要的。该解决方案的问题在于,它并不比定义依赖于属性的计算属性好多少。我想要的是一个通用的计算属性,它知道根据与该视图id同名的属性进行更新。这样,我就不必在视图上有数百个计算属性,每个属性的可能值对应一个。换句话说,这是一个视图,我将在具有多个属性的多个模型中使用该视图,但每个模型的功能都相同(从属属性除外)。我关心的是,我在textField中显示该值,并且该值将绑定到textField的value属性。可以将视图的属性绑定到辅助对象输出吗?