gpt4 book ai didi

binding - Emberjs - 临时禁用属性更改通知

转载 作者:行者123 更新时间:2023-12-02 06:06:11 24 4
gpt4 key购买 nike

有什么简单的方法可以临时禁用一个或多个对象属性的通知?

我知道你可以用 beginPropertyChanges() 推迟它们和 endPropertyChanges()但是在我明确启用它们之前,我根本不希望通知这些更改。

先感谢您。

用例:
我必须用另一个对象( A )设置一个对象( B )的属性。 B 的属性正在被其他物体的几种方法观察到。某时B对象的数据被清除并通知观察者,稍后 HTTP 响应为它们设置有用的东西。我不希望观察者在清除对象时得到通知,因为此时属性值无效。

最佳答案

这是一个老问题,但在谷歌搜索暂停观察员的搜索中似乎很高,所以我会发表评论。

这种特性有明显的用例,例如,对象的枚举属性由列表框表示,并且对象可能会发生变化。如果列表框用于从服务器请求属性更改并在成功时设置新值,那么自然的做法是使用列表框的 Controller 属性,在对象更改时将该属性设置为对象属性,并观察它向服务器发出请求。在这种情况下,无论何时对象发生变化,观察者都会收到不需要的通知。

但是,我同意这些用例是如此多样化,以至于 Ember 无法支持它们。

因此,一种可能的解决方法是在 Controller 中声明一个变量并在您更改属性时使用它,以便您仅对用户所做的更改使用react:

doNotReact: false,
updateManually: function() {
this.doNotReact = true;
Ember.run.scheduleOnce('actions', this, function() {
this.doNotReact = false;
});
............
this.set('something', somevalue);
............
},

onChange: function() {
if (this.doNotReact) return;
...............
}.observes('something')

doNotReact 的值将在观察者有机会运行后重置。我不建议在观察者中重置 stopper 变量,因为如果您将属性设置为它已经拥有的相同值,它就不会运行。

关于binding - Emberjs - 临时禁用属性更改通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10435446/

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