Ember使用自定义键

时间:2015-06-08 13:55:21

标签: ember.js ember-data

我的模型中包含store属性。很遗憾,store是ember-data中的保留字,因此我必须将其名称更改为authStore。我无法更改后端API以使用新的属性名称,因此我为此模型创建了一个新的序列化程序。

模型是:

App.Auth = DS.Model.extend({
  status: DS.attr("string"),
  authStore: DS.belongsTo("store"),
});

如果我使用以下序列化程序,发送到服务器的json包含正确的store密钥

App.AuthSerializer = DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
  attrs: {
    authStore: 'store',
  }
});

但我还需要为embedded: 'always'属性指定authStore,因此我将序列化程序更新为

App.AuthSerializer = DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
  attrs: {
    authStore: {key: 'store', embedded: 'always'}
  }
});

这种方式key属性被忽略,即使在将json发送到服务器时嵌入了authStore,也会忽略key属性并且它具有键authStore而不是store 。 如何使keyembedded属性同时发挥作用?

我使用的是ember-cli 0.2.7和ember-data 1.0.0-beta.18

2 个答案:

答案 0 :(得分:2)

不确定为什么要重写密钥,但与此同时,我认为在您的序列化程序中,您可以执行以下操作:

App.AuthSerializer = DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
  attrs: {
    authStore: {embedded: 'always'}
  },

  normalize: function(typeClass, hash) {
    hash.authStore = hash.store;
    delete hash.store;
    return this._super(typeClass, hash)
  },

  serialize: function(snapshot, options) {
    var json = this._super(snapshot, options);
    json.store = json.authStore;
    delete json.authStore;
    return json;
  }
});

似乎没有任何关于我确定其他人参与的内容的文档很容易找到。

答案 1 :(得分:1)

embedded: 'always'与撰写serialize: 'records', deserialize: 'records'相同,其中records也可以是idsfalse,或者如果关系是belongsTo则为单数。< / p>

因此,请尝试:

App.AuthSerializer = DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
  attrs: {
    authStore: {key: 'store', serialize: 'records', deserialize: 'records'}
  }
});

我已经设法通过将其包装在引号中来创建一个名为store的模型。以下是Operators Serializer的副本,其中Operators与&#34; store&#34;:

具有hasMany关系
attrs: {
    "stores" : { deserialize: 'records', serialize: 'ids' }
}