我有一个带有两个Model的EmberJS项目,它们都使用不同的序列化程序。通过在EmberJS Data内部调试,我发现对于第一个模型,Serializer类是" DS.JSONAPISerializer"而对于另一个" DS.JSONSerializer"。我希望他们都使用相同的。
我没有覆盖任何序列化程序,它们各自的适配器都是空的并扩展了相同的适配器(GeneralAdapter)。
唯一的区别是ModelA对象使用请求和适配器(使用与ModelB相同的适配器)从服务器推送到Ember,而ModelB只从控制器推送store.pushPayload(不使用适配器)。
这是一个功能还是一个错误,或者我完全不理解某些东西?
编辑:
适配器代码:
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);
});
});
}
});