在emberJS中,我有一個帶有一個名爲style的對象屬性的模型。我可以使用test.setPath('style.a')
來設置它的屬性。我正在嘗試觀察樣式對象,但我觀察到的回調不會觸發。您可以看到代碼here。使用setPath觀察對一個餘燼對象的所有更改
1
A
回答
5
對於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');
}
這將導致你的觀察員開火。
相關問題
- 1. 如何觀察模型對象上的所有屬性更改?
- 2. 如何觀察所有對象屬性更改?
- 3. 關鍵值觀察 - 如何觀察對象的所有屬性?
- 4. 壓縮兩個可觀察對象 - 先用另一個對象的輸入過濾一個觀察對象。
- 5. Ember.js:觀察所有對象屬性
- 6. 觀察對象
- 7. 使用ReactiveCocoa觀察NSArray中的對象更改
- 8. 觀察對象的數組的數組的可觀察對象
- 9. 更改一個對象的可觀察屬性更改集合中的所有屬性
- 10. NSFetchedResultsController觀察對永久存儲的所有更改嗎?
- 11. KnockoutJS觀察對象的可觀察對象
- 12. KnockoutJS可觀察對象的可觀察對象
- 13. 可用對象Angular2觀察
- 14. 觀察可觀察範圍內的所有屬性更改
- 15. 基於可觀察性,從可觀察對象中選擇可觀察對象
- 16. 觀察對NSUserDefaults的更改時出錯
- 17. 如何觀察對NSTextStorage的更改
- 18. 觀察對DOM屬性的更改
- 19. UITextField - 觀察對selectedTextRange的更改嗎?
- 20. 如何合併一系列可觀察對象內的觀察對象
- 21. 從另一個可觀察對象內部的可觀察對象返回對象
- 22. Angular.js:觀察一個對象的高度並更新其他對象的填充
- 23. 如何使用可觀察過濾可觀察對象
- 24. 當觀察者修改對象狀態時使用觀察者模式
- 25. 使用ES6代理觀察對象
- 26. 使用* ngIf來解析觀察對象
- 27. 如何從另一個可觀察對象訪問對象
- 28. Ember.js保存沒有餘燼數據的更新對象
- 29. 觀察對象和關聯對象
- 30. Knockout.mapping:它是否使所有嵌套對象都可觀察?