EmberJs, changedAttributes() 未显示 Hash 属性的嵌套键中的更改



对象是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

最新更新