我有一个组件需要在更改任何值时执行给定的操作,但是我创建的观察者不会触发:
export default Ember.Component.extend({
taxes: null,
NOAYears: 2,
NOAValues: Ember.computed("NOAYears", function() {
var NOAs = [],
lastYear = new Date().getFullYear() - 1;
for (var year = 0; year < this.get("NOAYears"); year++) {
NOAs.push({year: lastYear - year, value: 0});
}
return NOAs;
}),
NOAYearsChanged: function() {
// does not fire when any of the values change
}.observes("NOAValues.@each.value")
});
在组件模板中,我通过{{#each}}
迭代器:
{{#each NOAValues as |year|}}
<label for="{{year.year}}-value">{{year.year}}</label>
{{input min="0" step="any" value=year.value required=true placeholder="Yearly Income"}}
{{/each}}
当value
中的NOAValues
个属性发生变化时,如何让我的观察者触发?
答案 0 :(得分:2)
此问题已被验证为由遗留代码引起的错误,遗留代码将以大写字母(即PascalCase)开头的任何属性名称解释为全局或类名称引用...使属性不可观察。
来源:https://github.com/emberjs/ember.js/issues/10414
似乎会努力在即将发布的版本中修复它。
答案 1 :(得分:0)
为了观察属性更改,您需要为给定属性使用setter。我想你介绍一个扩展Ember的NOA模型。它应该足够了。例如:
// file app/model/noa.js
export default Ember.Object.extend({
year: undefined,
value: undefined
});
然后替换它:
for (var year = 0; year < this.get("NOAYears"); year++) {
NOAs.push({year: lastYear - year, value: 0});
}
与
for (var year = 0; year < this.get("NOAYears"); year++) {
NOAs.push(app.model.noa.create({year: lastYear - year, value: 0}));
}
您应该会看到一些属性更改。