使用Ember中的serializeId以_id格式序列化id

时间:2018-01-08 12:10:53

标签: ember.js

在我对服务器的回复中,我有id属性,如' id'。但要更新记录,我需要发送请求ID,如' _id'。我尝试使用serializeId serializeId方法。我的适配器看起来像

import DS from 'ember-data'
import DataAdapterMixin from 'ember-simple-auth/mixins/data-adapter-
mixin'
import Ember from 'ember'
import Inflector from 'ember-inflector'

export default DS.JSONAPIAdapter.extend(DataAdapterMixin, {
  authorizer: 'authorizer:token',
  pathForType (modelName) {
    let underscored = Ember.String.underscore(modelName)
    return Inflector.inflector.pluralize(underscored)
  }

}) 和语音信箱序列化器

import ApplicationSerializer from './application'
import DS from 'ember-data'
import Ember from 'ember'

export default ApplicationSerializer.extend(DS.EmbeddedRecordsMixin, {
  primaryKey: 'id',
  attrs: {
    history: {embedded: 'always'}
  },
  serializeIntoHash (data, type, snapshot, options) {
    let root = Ember.String.decamelize(type.modelName)
    data[root] = this.serialize(snapshot, options)
  },
  serializeId (snapshot, json, primaryKey) {
    let id = snapshot.id
    json['_id'] = id
  }
})

但序列化期间没有调用serializeId方法。而在我的有效载荷中,我仍然会感觉自己的身份如同#id;'而是' _id'。如何解决我的问题?

1 个答案:

答案 0 :(得分:0)

已更新 我发现在ember代码中,只有在启用ds-serialize-id功能时才会运行serializeId。

 serialize(snapshot, options) {
let json = {};

if (options && options.includeId) {
  if (isEnabled('ds-serialize-id')) {
    this.serializeId(snapshot, json, get(this, 'primaryKey'));
  } else {
    const id = snapshot.id;
    if (id) {
      json[get(this, 'primaryKey')] = id;
    }
  }
}

要运行serializeId方法,请启用enviroment.js中的ds-serialize-id属性

EmberENV: {
  FEATURES: {
    // Here you can enable experimental features on an ember canary build
    // e.g. 'with-controller': true
    'ds-serialize-id': true
  }

}

我认为这些问题已经解决了。