问题
The object is DS.Model:
$E.toString()
> "<reports-dashboard-client-app@model:report::ember596:914fc1b0-b14d-0133-bce2-68a86d03d830>"
The attribute is a Hash:
// app/models/report.js
export default DS.Model.extend({
filters: DS.attr(),
...
});
This is how it looks like now:
$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
There is not any change in the Model:
$E.changedAttributes()
> ember$data$lib$system$empty$object$$EmptyObject {}
I modify one of the Hash keys but still not change in the Model:
$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 {}
Only if I change the Hash it self I obtain a change in the Model:
$E.set('filters', {})
> Object {}
$E.changedAttributes()
> ember$data$lib$system$empty$object$$EmptyObject {filters: Array[2]}
What is curious is that I can observe the property filters.age_groups
and the Observer is triggered properly when this key has a change.
How can I check if there is any change in the nested keys of DS.Model attribute which is a Hash?
回答1:
I faced the same issue recently, and I solved by using Ember Fragments.
You still needs to create model/fragments for each relationship, but the samples are quite easy to understand.
Please leave comments if you need help though.
Update
There's another way of solving to use EmbeddedMixin
Reference: http://discuss.emberjs.com/t/hasdirtyattributes-always-false-for-nested-properties/8534
来源:https://stackoverflow.com/questions/35437395/emberjs-changedattributes-is-not-showing-changes-in-the-nested-keys-of-a-hash