首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在model.save中映射更改时,request遗漏请求体中的字段

在model.save中映射更改时,request遗漏请求体中的字段
EN

Stack Overflow用户
提问于 2015-04-18 04:27:30
回答 1查看 147关注 0票数 0

当使用Ember-data来保存模型时,我遇到了一个问题。我的模型的JSON结构如下所示:

代码语言:javascript
复制
{ post: {
      id: 1,
      name: 'post-1',
      trigger: ['trigger-1', 'trigger-2'],
      data: ['data-1', 'data-2']
  }
}

因为“数据”和“触发器”是DS.Model的保留关键字,所以我创建了一个映射,并根据Jurre的建议将它们重命名为sc_datasc_trigger

代码语言:javascript
复制
Application.SERIALIZATION_KEY_MAPPINGS = {
    'sc_data': 'data',
    'sc_trigger': 'trigger'
};

Application.ApplicationSerializer = DS.ActiveModelSerializer.extend({
    keyForAttribute: function (attr) {
        if (Application.SERIALIZATION_KEY_MAPPINGS.hasOwnProperty(attr)) {
            return Application.SERIALIZATION_KEY_MAPPINGS[attr];
        } else {
            return this._super(attr);
        }
    }
});

因此,我的post模型看起来如下:

代码语言:javascript
复制
Application.Post = DS.Model.extend({
    name: DS.attr('string'),
    sc_trigger: DS.attr(),
    sc_data: DS.attr()
});

sc_triggersc_datadatatrigger的重命名映射。

当使用this.store.find('post')this.store.find('post', 1) (即GET调用)时,这一切都很好。当我尝试使用this.store.createRecord('post')创建一个记录时,它会创建一个属性名为sc_datasc_trigger的记录。

代码语言:javascript
复制
var newPost = this.store.create('post', {
    name: 'test post',
    sc_data: [],
    sc_trigger: []
})

serialize函数也正确地解释了映射。newPost.serialize()返回

代码语言:javascript
复制
{
    name: 'test post',
    data: [],
    trigger: []
}

但是,当我调用newPost.save()时,在POST调用的HTTP主体中,缺少datatrigger字段。它只有

代码语言:javascript
复制
{
    name: 'test post'
}

newPost.save()正常工作时,我不知道为什么serialize()不生成正确的请求体。

Update I通过删除keyForAttribute映射并使用

代码语言:javascript
复制
Application.ApplicationSerializer = DS.ActiveModelSerializer.extend({
    attrs: {
        sc_data: {key: 'data'},
        sc_trigger: {key: 'trigger'}
    }
});

这似乎是使用保留关键字处理数据的建议方法。

EN

回答 1

Stack Overflow用户

发布于 2015-04-18 23:48:17

您使用的是哪个ember数据版本和emberjs版本?试着用身份证来保存-

代码语言:javascript
复制
var newPost = this.store.create('post', {
    id:1
    name: 'test post',
    sc_data: [],
    sc_trigger: []
});

保存和创建总是期望id。所以最好用id保存/创建记录。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29712875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档