对象是DS。型:
$E.toString()
> "<reports-dashboard-client-app@model: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 的嵌套键是否有任何更改。模型属性是哈希?
我最近遇到了同样的问题,我通过使用余烬碎片解决了。
您仍然需要为每个关系创建模型/片段,但示例很容易理解。
如果您需要帮助,请留下评论。
更新
还有另一种解决方法可以使用EmbeddedMixin
参考: http://discuss.emberjs.com/t/hasdirtyattributes-always-false-for-nested-properties/8534