gpt4 book ai didi

javascript - 在 Ember 的 Controller 上计算与观察

转载 作者:行者123 更新时间:2023-11-30 12:28:55 25 4
gpt4 key购买 nike

我一直认为 .observes('someProperty').property('someProperty') 的工作原理完全相同,只是前者用于触发函数调用,后者用于使对象属性保持最新。

但是现在我遇到了一个问题。我的 Controller 代码如下所示:

_logChange: function(){
console.log('model array observer fired');
}.observes('model.@each'),

statsData: function(){
console.log('statsData being updated');
...
return someArray;
}.property('model.@each')

观察者和计算属性都观察模型。@each 但出于某种原因,观察者在每次模型更改时触发,并且属性只更新两次,然后神秘地死掉。 statsData 在初始页面加载时计算一次,在第一次路由转换时计算一次,之后,所有转换(在底层 model 中所做的更改)都不会影响它。

这是怎么回事?他们不应该以同样的方式应对变化吗?

请注意,我正在在我的模板中使用statsData 属性。

最佳答案

观察者立即触发,计算的触发作为运行循环的一部分,并以去抖动的方式进行调度。目前,您所关注的只是您向集合中添加或删除了一项,而不是集合中其中一项的属性是否已更改。如果你想监视一个特定的属性,你需要指定它。

statsData: function(){
console.log('statsData being updated');
...
return someArray;
}.property('model.@each.cost')

如果你只是想观看集合的变化,你应该使用 []

statsData: function(){
console.log('statsData being updated');
...
return someArray;
}.property('model.[]')

关于javascript - 在 Ember 的 Controller 上计算与观察,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28347542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com