2016-02-16 33 views
1

對象的嵌套鍵的變化是DS.Model:EmberJs,changedAttributes()沒有顯示在哈希屬性

$E.toString() 
> "<[email protected]:report::ember596:914fc1b0-b14d-0133-bce2-68a86d03d830>" 

該屬性是散列:

// app/models/report.js 
export default DS.Model.extend({ 
    filters: DS.attr(), 
    ... 
}); 

這是如何它看起來像現在:

$E.get('filters') 
> Object {__ember_meta__: Meta} 
> __ember_meta__: Meta 
> age_groups: (...) 
> get age_groups: GETTER_FUNCTION() 
> set age_groups: SETTER_FUNCTION(value) 
> genders: (...) 
> get genders: GETTER_FUNCTION() 
> set genders: SETTER_FUNCTION(value) 
> __proto__: Object 

沒有模型中的任何改變:

$E.changedAttributes() 
> ember$data$lib$system$empty$object$$EmptyObject {} 

我改變哈希鍵中的一個,但仍然沒有在模型改變:

$E.get('filters.age_groups') 
> ["21-30", "31-40"] 
$E.set('filters.age_groups', ["21-30"]) 
> ["21-30"] 
$E.changedAttributes() 
> ember$data$lib$system$empty$object$$EmptyObject {} 

只有當我改變了哈希它的自我我獲得的型號變化:

$E.set('filters', {}) 
> Object {} 
$E.changedAttributes() 
> ember$data$lib$system$empty$object$$EmptyObject {filters: Array[2]} 

有什麼好奇的是,我可以觀察屬性filters.age_groups和觀察者被正確觸發,當這個鍵有變化。

如何檢查DS.Model屬性的嵌套關鍵字是否存在任何變化?

+1

灰燼無法觀察爲此事對嵌套哈希任意鍵..或者陣列。你需要定義明確的觀察者(你已經顯示)或者利用某種對象驗證,如:'ember-validations' addon ..或者'ember-cp-validations' addon。 – Grapho

+1

進一步詳細說明......原因燼模型能夠觀察到典型'attrs'像他們一樣的變化..特別是因爲您已經在您的模型定義中專門定義了鍵,這些鍵提供了觀察這些變化所需的對象映射...當你更進一步並且創建一個嵌套級別時,它會崩潰。沒有定義的attrs – Grapho

回答