使用自定义Ember-Data REST适配器进行PUT请求

时间:2014-08-22 20:26:47

标签: json rest ember.js ember-data

我使用Ember-Data 1.0.0.Beta-9和Ember 1.7通过DreamFactory的REST平台使用REST API。 (http://www.dreamfactory.com)。

我必须扩展RESTAdapter才能使用DF,并且我已经能够毫无问题地实现GET和POST请求。我现在正在尝试实施model.save()(PUT)请求并且遇到严重的打嗝。

调用model.save()将带有正确数据的PUT请求发送到我的API端点,我得到一个200 OK响应,其JSON响应为{ "id": "1" },这应该是应该发生的。但是,当我尝试访问更新的记录时,除了ID之外,所有属性都是空的,并且服务器上的记录未更新。我可以使用在请求中传递的相同JSON字符串,将其粘贴到DreamFactory Swagger API文档中并且它没有问题 - 响应很好并且记录在数据库上更新。

我创建了一个JSBin来显示http://emberjs.jsbin.com/nagoga/1/edit

的所有代码

不幸的是,由于有问题的服务器被锁定为仅接受来自我们公司公共IP范围的请求,因此我无法获得实例。

DreamFactory提供了相关API的实时演示 https://dsp-sandman1.cloud.dreamfactory.com/swagger/#!/db/replaceRecordsByIds

2 个答案:

答案 0 :(得分:3)

确定最后我发现您可以通过在PUT请求的末尾添加?fields=*参数来自定义DreamFactory响应。我使用以下内容将其修改为updateRecord方法:

updateRecord: function(store, type, record) {
    var data = {};
    var serializer = store.serializerFor(type.typeKey);
    serializer.serializeIntoHash(data, type, record);
    var adapter = this;

    return new Ember.RSVP.Promise(function(resolve, reject) {
        // hack to make DSP send back the full object
        adapter.ajax(adapter.buildURL(type.typeKey) + '?fields=*', "PUT", { data: data }).then(function(json){
            // if the request is a success we'll return the same data we passed in
            resolve(json);
        }, function(reason){
            reject(reason.responseJSON);
        });
    });
}

而且我们会更新!

DreamFactory支持在完全自定义响应的请求结束时添加几个参数 - 在某些时候我会考虑正确实现这一点,但目前我可以继续我的项目。耶!

答案 1 :(得分:0)

EmberData将来自服务器的响应解释为ID为" 1"的空对象。其中没有其他属性。您需要从服务器返回整个新对象,并反映更改。