如何序列化与ember-data>的hasMany关系? beta15?

时间:2015-04-11 22:24:17

标签: ember.js ember-data ember-cli

直到ember-beta 14,一切都很顺利。 我有goalaccount型号。

目标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有关,但找不到任何有关如何使用它的线索。

谢谢!

2 个答案:

答案 0 :(得分:0)

感谢天使VB的帮助。

但我提出了另一个解决方案,这似乎是问题的根源。

ember-data beta.14之前,您需要将select绑定到value.content。 Ant适用于singlemultiple选择。

{{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'
}}

现在,使用相同的序列化程序,它可以工作!它全部为后端序列化。

答案 1 :(得分:-2)

我遇到了同样的问题,但终于可以解决这个问题了:

型号/ foo.js:

var foo = DS.Model.extend({
...,
...,
...,
bars: DS.hasMany('bar', {async: true})
});
export default foo;

型号/ bar.js:

var bar = DS.Model.extend({
...,
Foos: DS.hasMany('foo', {async: true})
});

export default bar;

串行器/ foo.js:

import DS from 'ember-data';
export default DS.ActiveModelSerializer.extend(DS.EmbeddedRecordsMixin,{
  attrs: {  
    Bars: {
     embedded: 'always'
    }
  }
});

串行器/ bar.js:

import DS from 'ember-data';
export default DS.ActiveModelSerializer.extend(DS.EmbeddedRecordsMixin,{
  attrs: {    
    Foos: {
          embedded: 'always'
        }
   }
});

我希望这对你有所帮助。