数据更改时,Ember组件计算函数不会重新运行

时间:2017-05-25 15:57:31

标签: javascript ember.js

我已将一个字符串值存储在计算属性中,如下所示:

clientId: Ember.computed.oneWay("_clientId")

其中_clientId被定义为对象上的属性,如下所示:

export default Ember.service.extend { _clientId: null, clientId: Ember.computed.oneWay("_clientId"), updateId() {this.set("_clientId", "fe48822d-bf50-44a1-9ce0-61b06504d726"); } }

然后我有一个具有计算属性的组件,如:

chartData: Ember.computed("data", function () {
    const data = this.get("data");

    const clientId = this.get("session").get("clientId");
    console.log(clientId);

    if (data && data.get("left") !== undefined && data.get("right") !== undefined) {
        return data;
    }

    this.set("_chartDisplayData", null);
    return null;
})

当我调用updateId时,我希望在更改clientId的值时重新运行chartData函数(我验证了clientId的值已更改)。但是,chartData函数永远不会重新运行,为什么会这样?

1 个答案:

答案 0 :(得分:1)

你需要告诉computed property about all of your dependencies。首先,如果计算属性不在某处使用,它将永远不会运行。如果您还没有使用它,则需要observer。但假设您实际使用它,计算属性将仅在列出的依赖项之一发生更改时重新计算。如果将对象列为依赖项,则只有在更换整个对象时,才会更新某些对象的属性。试试这个:

pip freeze > requirements.txt