使用setPath观察余烬对象的所有更改
Observe all changes to an ember object with setPath
在emberJS中,我有一个模型,它具有一个名为style的对象属性。我可以使用test.setPath('style.a')
设置它的属性。我正在尝试观察样式对象,但我的观察回调没有启动。
你可以在这里看到代码。
这种对Ember观察者工作方式的基本误解是一个常见的错误。在您的示例中,您的视图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');
}
这将导致你的观察者开火。
相关文章:
- 引用对象中的通用值
- jQuery匹配JSON对象的部分文本
- 节点导出返回一个空对象
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- 全局变量和全局对象的属性之间有什么区别吗
- 比较从函数和生成的日期对象
- Javascript,访问一个主要对象模块模式中的每个对象
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 调整窗口大小时,可拖动的对象会出现在容器外部
- 如何使用javascript从主svg对象动态创建svg视图框
- 如何使用json将对象列表从java转换为javascript
- 序列化数据属性中对象的最可靠方法
- 如何访问声音管理器2创建的声音对象
- FabricJs-限制主对象内添加对象的移动区域
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 值对象在某个变量发生更改后发生更改
- 如何为json对象中的段发送array[]
- 使用setPath观察余烬对象的所有更改