Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript EmberJS数据DS.JSONSerializer与DS.JSONAPISerializer_Javascript_Ember.js_Ember Data - Fatal编程技术网

Javascript EmberJS数据DS.JSONSerializer与DS.JSONAPISerializer

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

我有一个带有两个模型的EmberJS项目,它们都可以使用不同的序列化程序。通过在EmberJS数据内部进行调试,我发现对于第一个模型,序列化器的类是“DS.JSONAPISerializer”,而对于另一个模型,序列化器的类是“DS.JSONSerializer”。我希望他们都使用相同的

我没有重写任何序列化程序,它们各自的适配器为空,并扩展同一个适配器(GeneralAdapter)

唯一的区别是ModelA对象使用请求和适配器(使用与ModelB相同的适配器)从服务器推送到Ember,而ModelB仅从控制器的store.pushPayload(不使用适配器)推送到Ember

这是一个特性还是一个bug,还是我完全不理解某些东西

编辑:

适配器代码:

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
是所有序列化程序的基类。