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屬性的嵌套關鍵字是否存在任何變化?
灰燼無法觀察爲此事對嵌套哈希任意鍵..或者陣列。你需要定義明確的觀察者(你已經顯示)或者利用某種對象驗證,如:'ember-validations' addon ..或者'ember-cp-validations' addon。 – Grapho
進一步詳細說明......原因燼模型能夠觀察到典型'attrs'像他們一樣的變化..特別是因爲您已經在您的模型定義中專門定義了鍵,這些鍵提供了觀察這些變化所需的對象映射...當你更進一步並且創建一個嵌套級別時,它會崩潰。沒有定義的attrs – Grapho