Ember RESTAdapter - 模型中有许多关系 - 如何使用 POST 发送空数组?
Ember RESTAdapter - hasMany relationship in model - how to send empty array with POST?
Ember 菜鸟在这里 -
我有两个模型具有如下 hasMany 关系 -
var Season = DS.Model.extend({
name: DS.attr('string'),
periods: DS.hasMany('period', {
async: false
})
});
var Period = DS.Model.extend({
from: DS.attr('date'),
to: DS.attr('date'),
season: DS.belongsTo('season')
});
季节可以没有任何时期 -
这就是我创建季节记录并保存的方式 --
var season = this.store.createRecord('season', {
name: name
});
season.save().then(function(season){
/* season saved */
});
POST 请求负载如下所示 --
{
"season" : {
"name" : "test"
}
}
但是后端 API 期望有效载荷是这样的——带有一个空的句点数组
{
"season" : {
"name" : "test"
"periods" : []
}
}
我该如何实现?
您需要通过修改序列化程序来更改 ember 发送到您的服务器的内容,您可以仅针对该模型覆盖 SeasonSerializer
或 ApplicationSerializer
来执行此操作宽
请参阅 API 文档的这一部分 http://emberjs.com/api/data/classes/DS.RESTSerializer.html#method_serialize
类似于:
App.SeasonSerializer = DS.RESTSerializer.extend({
serialize: function(snapshot, options) {
var json = this._super(snapshot, options);
if(json.periods === undefined) {
json.periods = [];
}
return json;
}
});
如果您不能修改服务器,这应该可以解决问题:
App.SeasonSerializer = DS.RESTSerializer.extend({
serialize: function(snapshot, options) {
var json = this._super(snapshot, options);
if (Ember.isEmpty(json.periods)) {
json.periods = [];
}
return json;
}
});
在一般情况下,您可以创建一个序列化程序,为所有空的 hasMany 关系发送 [ ]。
serializers/application.js:
import DS from 'ember-data';
export default DS.RESTSerializer.extend({
serialize(snapshot, options) {
var json = {};
snapshot.eachAttribute(function(name) {
json[name] = snapshot.attr(name);
});
snapshot.eachRelationship(function(name, relationship) {
if (relationship.kind === 'hasMany') {
const list = snapshot.hasMany(name, { ids: true });
if(Ember.isEmpty(list)){
json[name] = [];
}else{
json[name] = list;
}
}
});
return json;
}
});
Ember 菜鸟在这里 -
我有两个模型具有如下 hasMany 关系 -
var Season = DS.Model.extend({
name: DS.attr('string'),
periods: DS.hasMany('period', {
async: false
})
});
var Period = DS.Model.extend({
from: DS.attr('date'),
to: DS.attr('date'),
season: DS.belongsTo('season')
});
季节可以没有任何时期 - 这就是我创建季节记录并保存的方式 --
var season = this.store.createRecord('season', {
name: name
});
season.save().then(function(season){
/* season saved */
});
POST 请求负载如下所示 --
{
"season" : {
"name" : "test"
}
}
但是后端 API 期望有效载荷是这样的——带有一个空的句点数组
{
"season" : {
"name" : "test"
"periods" : []
}
}
我该如何实现?
您需要通过修改序列化程序来更改 ember 发送到您的服务器的内容,您可以仅针对该模型覆盖 SeasonSerializer
或 ApplicationSerializer
来执行此操作宽
请参阅 API 文档的这一部分 http://emberjs.com/api/data/classes/DS.RESTSerializer.html#method_serialize
类似于:
App.SeasonSerializer = DS.RESTSerializer.extend({
serialize: function(snapshot, options) {
var json = this._super(snapshot, options);
if(json.periods === undefined) {
json.periods = [];
}
return json;
}
});
如果您不能修改服务器,这应该可以解决问题:
App.SeasonSerializer = DS.RESTSerializer.extend({
serialize: function(snapshot, options) {
var json = this._super(snapshot, options);
if (Ember.isEmpty(json.periods)) {
json.periods = [];
}
return json;
}
});
在一般情况下,您可以创建一个序列化程序,为所有空的 hasMany 关系发送 [ ]。
serializers/application.js:
import DS from 'ember-data';
export default DS.RESTSerializer.extend({
serialize(snapshot, options) {
var json = {};
snapshot.eachAttribute(function(name) {
json[name] = snapshot.attr(name);
});
snapshot.eachRelationship(function(name, relationship) {
if (relationship.kind === 'hasMany') {
const list = snapshot.hasMany(name, { ids: true });
if(Ember.isEmpty(list)){
json[name] = [];
}else{
json[name] = list;
}
}
});
return json;
}
});