Javascript EmberJS数据DS.JSONSerializer与DS.JSONAPISerializer
我有一个带有两个模型的EmberJS项目,它们都可以使用不同的序列化程序。通过在EmberJS数据内部进行调试,我发现对于第一个模型,序列化器的类是“DS.JSONAPISerializer”,而对于另一个模型,序列化器的类是“DS.JSONSerializer”。我希望他们都使用相同的 我没有重写任何序列化程序,它们各自的适配器为空,并扩展同一个适配器(GeneralAdapter) 唯一的区别是ModelA对象使用请求和适配器(使用与ModelB相同的适配器)从服务器推送到Ember,而ModelB仅从控制器的store.pushPayload(不使用适配器)推送到Ember 这是一个特性还是一个bug,还是我完全不理解某些东西 编辑: 适配器代码:Javascript EmberJS数据DS.JSONSerializer与DS.JSONAPISerializer,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,我有一个带有两个模型的EmberJS项目,它们都可以使用不同的序列化程序。通过在EmberJS数据内部进行调试,我发现对于第一个模型,序列化器的类是“DS.JSONAPISerializer”,而对于另一个模型,序列化器的类是“DS.JSONSerializer”。我希望他们都使用相同的 我没有重写任何序列化程序,它们各自的适配器为空,并扩展同一个适配器(GeneralAdapter) 唯一的区别是ModelA对象使用请求和适配器(使用与ModelB相同的适配器)从服务器推送到Ember,而Mo
App.ApplicationAdapter = DS.Adapter.extend(DS.BuildURLMixin, {
namespace: rabbit.common.baseUrl + 'editor-jersey',
defaultSerializer: '-rest',
headers: {
accept: 'application/json'
},
findAll: function(store, type, sinceToken) {
var adapter = this;
var url = this.buildURL(type.modelName, null, null, 'findAll');
return new Ember.RSVP.Promise(function(resolve, reject) {
Ember.$.getJSON(url).then(function(data) {
Ember.run(null, resolve, data[type.modelName + "s"]);
}.bind(this), function(jqXHR) {
jqXHR.then = null; // tame jQuery's ill mannered promises
Ember.run(null, reject, jqXHR);
}.bind(this));
}.bind(this));
},
findRecord: function(store, type, id, snapshot) {
var url = this.buildURL(type.modelName, id, snapshot, 'findRecord');
return new Ember.RSVP.Promise(function(resolve, reject) {
Ember.$.getJSON(url).then(function(data, status, jqXHR) {
Ember.run(null, resolve, data[type.modelName]);
}, function(jqXHR) {
jqXHR.then = null; // tame jQuery's ill mannered promises
Ember.run(null, reject, jqXHR);
});
});
},
updateRecord: function(store, type, snapshot) {
var adapter = this;
var data = this.serialize(snapshot, { includeId: true });
var url = this.buildURL(type.modelName, snapshot.id, snapshot, 'updateRecord');
return new Ember.RSVP.Promise(function(resolve, reject) {
Ember.$.ajax({
method: 'PUT',
url: url,
data: JSON.stringify(data),
contentType: 'application/json',
dataType: 'json'
}).then(function(data) {
Ember.run(null, resolve, data[type.modelName]);
}, function(jqXHR) {
jqXHR.then = null; // tame jQuery's ill mannered promises
Ember.run(null, reject, jqXHR);
});
});
},
createRecord: function(store, type, snapshot) {
var adapter = this;
var data = this.serialize(snapshot, { includeId: true });
var url = this.buildURL(type.modelName, null, snapshot, 'createRecord');
return new Ember.RSVP.Promise(function(resolve, reject) {
Ember.$.ajax({
method: 'POST',
url: url,
data: JSON.stringify(data),
contentType: 'application/json',
dataType: 'json'
}).then(function(data) {
if (snapshot.isNew) {
data[type.modelName].isNew = snapshot.isNew;
}
Ember.run(null, resolve, data[type.modelName]);
}, function(jqXHR) {
jqXHR.then = null; // tame jQuery's ill mannered promises
Ember.run(null, reject, jqXHR);
});
});
}
});
可能是几件事
JSONAPISerializer
扩展了JSONSerializer
,因此,如果您深入到堆栈中,最终将进入后者。你能分享请求+有效载荷代码吗?和版本。如果您使用的是Ember Data 2.x,那么默认值应该是JSONAPIAdapter
/JSONAPISerializer
。您认为这就是使用JSONSerializer的原因吗?我添加了适配器的代码。我现在使用defaultAdapter
将其设置为剩余的适配器。如果您希望使用的是DS.RESTAdapter.extend,则应该改为使用DS.RESTAdapter.extend
DS.Adapter
是所有(核心)适配器的基类,而DS.Serializer
是所有序列化程序的基类。