在数据存储区中创建新记录后,我无法将数据保存回API。
// routes/application.js
import Ember from 'ember';
export default Ember.Route.extend({
model(){
return this.store.findAll('user');
},
actions: {
test(name){
this.store.createRecord('user', {
username: name,
email: 'email@email.com',
is_staff: false
}).save();
}
}
});
REST API期待此请求:
{
"data": {
"type": "User",
"id": null,
"attributes": {
"username": "bill",
"email": "email@email.com",
"is_staff": false
}
}
}
Ember-data正在发送:
{
data:
{
attributes:
{
username: "bill",
email: "email@email.com",
is-staff: false
},
type: "users"
}
}
以下是我对自定义序列化程序的看法,但是Ember没有看到它。我这样做了吗?
import DS from 'ember-data';
export default DS.JSONAPISerializer.extend({
normalizeCreateRecordResponse(store, type, payload){
return {
data: {
type: 'User',
id: null,
attributes: {
username: payload.username,
email: payload.email,
is_staff: payload.is_staff
}
}
}
}
});
另外,为了确保API正常工作,我可以通过jQuery.post()发送数据:
// routes/application.js
import Ember from 'ember';
export default Ember.Route.extend({
model(){
return this.store.findAll('user');
},
actions: {
test(name){
Ember.$.post('http://localhost:8000/api/users/', {
username: name,
email: 'email@email.com',
is_staff: false
});
}
});
答案 0 :(得分:1)
您正在尝试normalizeCreateRecordResponse
方法,但这适用于从创建记录POST调用中从服务器获取数据的时间。
如果要修改发送到服务器所需的数据:
https://guides.emberjs.com/v2.0.0/models/customizing-serializers/#toc_customizing-serializers
使用serialize
方法(还有其他序列化方法可以实现更细粒度的控制......但是这个方法非常简单,可以根据需要进行测试)
此链接说明了这一点。如果你无法从那里弄明白,请告诉我。