gpt4 book ai didi

javascript - Emberjs 更新/观察者/运行循环

转载 作者:行者123 更新时间:2023-11-29 19:38:37 24 4
gpt4 key购买 nike

我有一个 Controller ,它观察一个属性(数组),每次它发生变化时,都会在服务器上调用一个昂贵的函数,然后显示结果。

在初始 Controller 设置中(在路由中),我需要遍历数组并设置一些值 - 即

something.forEach(function(el) { myArrayProperty.set(el.id, true); });

这会在通过 forEach 的每个循环中触发观察者。我如何遍历 forEach,更新所有元素,然后然后允许 Ember 观察器触发?

我已经尝试过 scheduleOnceEmber.run(function() {..}) 但我似乎无法让它正常工作。

谢谢!

最佳答案

解决此问题的一种方法是限制或去抖观察数组的昂贵函数。

参见 Ember.run.debounce

例如你现在有这个:

App.MyController = Ember.ArrayController.extend({
myExpensiveObserver: function() {
/* some expensive computations */
}.observes('content.@each.id'),
});

...然后您将其更改为:

App.MyController = Ember.ArrayController.extend({
myExpensiveObserver: function() {
Ember.run.debounce(this, this.myExpensiveObserverImpl, 300);
}.observes('content.@each.id'),
myExpensiveObserverImpl: function() {
/* some expensive computations */
},
});

(将 300 替换为您希望重新计算之间的最小间隔。)

两者之间有细微的差别 Ember.run.debounceEmber.run.throttle ,您可能更喜欢其中之一。但是,从您的描述来看,似乎两者都符合要求。

正如@kingpin2k 所指出的,请注意传递给去抖动或节流的函数。它不能是匿名的,因为 Ember 无法在每次调用时确定它们是否确实相同。

关于javascript - Emberjs 更新/观察者/运行循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24285909/

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