簡體   English   中英

EmberJS觀察者未觸發

[英]EmberJS Observer Not Firing

EmberJSBin在這里

我有一個需要更改其任何值時執行給定操作的組件,但是我創建的觀察器不會觸發:

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}}

NOAValues任何value屬性發生更改時,如何使觀察者觸發?

此問題已被驗證為由遺留代碼引起的錯誤,該錯誤會將任何以大寫字母開頭的屬性名稱(即PascalCase)解釋為全局或類名稱引用,從而使該屬性不可觀察。

來源: https//github.com/emberjs/ember.js/issues/10414

似乎將在某些即將發布的版本中進行修復。

為了觀察屬性的變化,您需要為給定的屬性使用一個setter。 我認為您引入了擴展Ember.Object的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}));
}

您應該看到一些屬性更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM