EmberJS Data DS.JSONSerializer vs. DS.JSONAPISerializer

时间:2016-01-16 08:28:38

标签: javascript ember.js ember-data

我有一个带有两个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);
            });
        });
    }
});

0 个答案:

没有答案