当使用Ember-data来保存模型时,我遇到了一个问题。我的模型的JSON结构如下所示:
{ post: {
id: 1,
name: 'post-1',
trigger: ['trigger-1', 'trigger-2'],
data: ['data-1', 'data-2']
}
}因为“数据”和“触发器”是DS.Model的保留关键字,所以我创建了一个映射,并根据Jurre的建议将它们重命名为sc_data和sc_trigger
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模型看起来如下:
Application.Post = DS.Model.extend({
name: DS.attr('string'),
sc_trigger: DS.attr(),
sc_data: DS.attr()
});sc_trigger和sc_data是data和trigger的重命名映射。
当使用this.store.find('post')和this.store.find('post', 1) (即GET调用)时,这一切都很好。当我尝试使用this.store.createRecord('post')创建一个记录时,它会创建一个属性名为sc_data和sc_trigger的记录。
var newPost = this.store.create('post', {
name: 'test post',
sc_data: [],
sc_trigger: []
})serialize函数也正确地解释了映射。newPost.serialize()返回
{
name: 'test post',
data: [],
trigger: []
}但是,当我调用newPost.save()时,在POST调用的HTTP主体中,缺少data和trigger字段。它只有
{
name: 'test post'
}当newPost.save()正常工作时,我不知道为什么serialize()不生成正确的请求体。
Update I通过删除keyForAttribute映射并使用
Application.ApplicationSerializer = DS.ActiveModelSerializer.extend({
attrs: {
sc_data: {key: 'data'},
sc_trigger: {key: 'trigger'}
}
});这似乎是使用保留关键字处理数据的建议方法。
发布于 2015-04-18 23:48:17
您使用的是哪个ember数据版本和emberjs版本?试着用身份证来保存-
var newPost = this.store.create('post', {
id:1
name: 'test post',
sc_data: [],
sc_trigger: []
});保存和创建总是期望id。所以最好用id保存/创建记录。
https://stackoverflow.com/questions/29712875
复制相似问题