gpt4 book ai didi

javascript - 使用 setPath 观察对 ember 对象的所有更改

转载 作者:行者123 更新时间:2023-11-30 09:00:36 25 4
gpt4 key购买 nike

在 emberJS 中,我有一个模型,它有一个名为 style 的对象属性。我可以使用 test.setPath('style.a') 设置它的属性。我正在尝试观察样式对象,但我的观察回调未触发。

可以看到代码here .

最佳答案

这种对 Ember 观察者工作方式的基本误解是一个常见错误。在您的示例中,您的 View test 中有以下内容:

...

style : Ember.Object.create({
a:4,
b:2
}),
setStyle : function(key, val){
var style = this.get('style');
style[key] = val;
this.set('style', style);
},

...

test.style 属性指向一个 Ember.Object 并且 test.setStyle() 正在改变给定属性的值在那个 Ember.Object 上。一个常见的错误是认为将一个属性重置为同一个对象会调用它上面的任何观察者,就像您使用以下行所做的那样:this.set('style', style)。嗯,这不是 Ember 观察者的工作方式。当属性的实际值发生变化时,Ember 中的观察者会自动触发。将 style 属性设置为自身不会更改 style 指向的对象,因此它不会更改属性的值(实际上该代码根本不执行任何操作).在这种情况下,您似乎需要手动告知 Ember style 属性已更改。您可以通过调用 notifyPropertyChange() 来实现。

查看以下为 setStyle 修改的代码:

setStyle : function(key, val){
var style = this.get('style');
style.set(key, val); // You should always use `.get()` and `.set()`

this.notifyPropertyChange('style');
}

这将导致你的观察者开火。

关于javascript - 使用 setPath 观察对 ember 对象的所有更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9635676/

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