我使用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
答案 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"的空对象。其中没有其他属性。您需要从服务器返回整个新对象,并反映更改。