【问题标题】:Template is not refreshing on object property change (Ember 2)对象属性更改时模板未刷新(Ember 2)
【发布时间】:2017-08-14 22:32:38
【问题描述】:

我遇到了 Ember 的问题,当我更改对象的属性(在本例中为过滤英雄)然后将计算属性设置为更新版本时,我的模板不会更新。如何在调用操作时强制模板随着对象的更改而更新?

在我的模板中,我有:

{{#each filteredHeroes as |hero index|}}
{{hero._data.AttacksPerSecond}}
{{/each}}

在我的控制器中,我有一个动作:

calculateStats() {
        var heroes = this.get("filteredHeroes");

        var valueOfAttackSpeedPerCP = 5.5;
        var valueOfPowerPerCP = 6;

        var attackSpeed = this.get('cpAttackSpeed') * valueOfAttackSpeedPerCP;
        var power = this.get('cpPower') * valueOfPowerPerCP;

        for (var i = 0; i < heroes.length; i++) {
            //Set Attacks per second for the specific hero
            heroes[i]._data.AttacksPerSecond = (1 / (heroes[i]._data.attributesByLevel[14]['BaseAttackTime'] / ((heroes[i]._data.attributesByLevel[14]['AttackSpeedRating'] + attackSpeed) / 100)));   
        }
        this.set('filteredHeroes', heroes);
    }

感谢您的帮助!

【问题讨论】:

  • 使用Ember.set(heroes[i],'_data.AttacksPerSecond', value) 只有这样更改才会反映在模板中。你甚至可以试试 notifyPropertyChange emberjs.com/api/classes/…
  • @kumkanillam 太棒了!那行得通,谢谢!如果您将其作为答案发布,我可以接受,否则我将发布一个并使用更新的代码接受它

标签: javascript ember.js ember-cli


【解决方案1】:

如果您正在处理Ember.Object,那么我们需要使用getset 方法,以便更改将反映在模板中并触发相应的计算属性和观察者。 对于数组操作,您需要使用可用的方法Ember.NativeArray

如果您不确定该对象是普通对象还是Ember.Object,那么您始终可以使用Ember.Set,以便模板、计算属性和观察者可以观察到变化。

【讨论】:

  • 我不得不使用 Ember.set(heroes[i],'_data.AttacksPerSecond', value) 来更改一个属性,而不是设置整个对象
猜你喜欢
  • 2014-09-22
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 2018-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
相关资源
最近更新 更多