如何序列化具有 ember-data > beta15 的 hasMany 关系?
How can I serialize hasMany relations with ember-data > beta15?
直到 ember-beta 14,一切都很顺利。
我有 goal
和 account
个模型。
目标hasMany('account')
,但帐户没有或不属于目标(不在ember,我的应用程序上没有原因。
使用自定义序列化程序,我一切正常:
//serializers/goal.js
import DS from 'ember-data';
export default DS.ActiveModelSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
account: { serialize: 'ids' }
}
});
我的 post
请求满足了我的所有需求:
...
account_ids: [1, 2, 3]
...
现在我只有 account_ids: []
。
Ember 现在关于我的序列化程序,否则我只会 accounts
,而不是 account_ids
请求。
我尝试了 docs 中所有可能的组合,有和没有 {async: true}
,等等,没有任何效果。
我做错了什么?
我觉得它与新的 snapshots
api 有关,但找不到任何关于如何使用它的线索。
谢谢!
我遇到了同样的问题,但最终解决了这个问题:
Models/foo.js:
var foo = DS.Model.extend({
...,
...,
...,
bars: DS.hasMany('bar', {async: true})
});
export default foo;
Models/bar.js:
var bar = DS.Model.extend({
...,
Foos: DS.hasMany('foo', {async: true})
});
export default bar;
Serializer/foo.js:
import DS from 'ember-data';
export default DS.ActiveModelSerializer.extend(DS.EmbeddedRecordsMixin,{
attrs: {
Bars: {
embedded: 'always'
}
}
});
Serializer/bar.js:
import DS from 'ember-data';
export default DS.ActiveModelSerializer.extend(DS.EmbeddedRecordsMixin,{
attrs: {
Foos: {
embedded: 'always'
}
}
});
希望对你有所帮助。
感谢天使的帮助VB。
但我想出了另一个解决方案,这似乎是问题的根源。
在 ember-data beta.14
之前,您需要将 select
绑定到 value.content
。
Ant 它适用于 single
和 multiple
select.
{{view 'select'
content=myDropdownContent
value=model.myProperty.content
}}
{{view 'select'
content=myDropdownContent
value=model.myProperty.content
multiple='multiple'
}}
从 beta-15
开始,如果您绑定到 content
它似乎可以工作,在 Ember Inspector
上您会看到您的数据发生变化,但 它没有序列化.
解决方案非常简单,只需遵循 Ember 文档...
{{view 'select'
content=myDropdownContent
value=model.myProperty
}}
{{view 'select'
content=myDropdownContent
selection=model.myProperty
multiple='multiple'
}}
现在,使用相同的序列化器,它可以工作了!全部为后端序列化。
直到 ember-beta 14,一切都很顺利。
我有 goal
和 account
个模型。
目标hasMany('account')
,但帐户没有或不属于目标(不在ember,我的应用程序上没有原因。
使用自定义序列化程序,我一切正常:
//serializers/goal.js
import DS from 'ember-data';
export default DS.ActiveModelSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
account: { serialize: 'ids' }
}
});
我的 post
请求满足了我的所有需求:
...
account_ids: [1, 2, 3]
...
现在我只有 account_ids: []
。
Ember 现在关于我的序列化程序,否则我只会 accounts
,而不是 account_ids
请求。
我尝试了 docs 中所有可能的组合,有和没有 {async: true}
,等等,没有任何效果。
我做错了什么?
我觉得它与新的 snapshots
api 有关,但找不到任何关于如何使用它的线索。
谢谢!
我遇到了同样的问题,但最终解决了这个问题:
Models/foo.js:
var foo = DS.Model.extend({
...,
...,
...,
bars: DS.hasMany('bar', {async: true})
});
export default foo;
Models/bar.js:
var bar = DS.Model.extend({
...,
Foos: DS.hasMany('foo', {async: true})
});
export default bar;
Serializer/foo.js:
import DS from 'ember-data';
export default DS.ActiveModelSerializer.extend(DS.EmbeddedRecordsMixin,{
attrs: {
Bars: {
embedded: 'always'
}
}
});
Serializer/bar.js:
import DS from 'ember-data';
export default DS.ActiveModelSerializer.extend(DS.EmbeddedRecordsMixin,{
attrs: {
Foos: {
embedded: 'always'
}
}
});
希望对你有所帮助。
感谢天使的帮助VB。
但我想出了另一个解决方案,这似乎是问题的根源。
在 ember-data beta.14
之前,您需要将 select
绑定到 value.content
。
Ant 它适用于 single
和 multiple
select.
{{view 'select'
content=myDropdownContent
value=model.myProperty.content
}}
{{view 'select'
content=myDropdownContent
value=model.myProperty.content
multiple='multiple'
}}
从 beta-15
开始,如果您绑定到 content
它似乎可以工作,在 Ember Inspector
上您会看到您的数据发生变化,但 它没有序列化.
解决方案非常简单,只需遵循 Ember 文档...
{{view 'select'
content=myDropdownContent
value=model.myProperty
}}
{{view 'select'
content=myDropdownContent
selection=model.myProperty
multiple='multiple'
}}
现在,使用相同的序列化器,它可以工作了!全部为后端序列化。