我在前端应用程序(ember 2.3.1,ember-data 2.3.3)和后端(使用jsonapi序列化器的rails 5)之间进行通信时遇到了麻烦。
我将尝试描述我所拥有的所有情况。
在后端,我想在jsonapi中发送响应并以REST格式获取请求。我正在使用序列化器以及我如何检查后端发送正确的响应。例如{"data":[{"id":"1","type":"projects","attributes":{"title":"one"},"links...
在ember端我定义了jsonapi适配器和rest序列化器。
当ember从后端接收数据时,我在Encountered "data" in payload, but no model was found for model name "datum" (resolved model name using smart-task-ember@serializer:application:.modelNameFromPayloadKey("data")
这样的控制台中收到了警告。
当我将ember中的序列化器从休息状态改为jsonapi时,一切都会正常工作。但请求以jsonapi格式进入后端。我收到了下一个参数{"data"=>{"attributes"=>{"title"=>"test"}, "type"=>"projects"}, "controller"=>"projects", "action"=>"create", "project"=>{}}
而不是{"project"=>{"title"=>"qwe"}, "controller"=>"projects", "action"=>"create"}
我无法理解为什么休息序列化器和jsonapi适配器相互影响,如何在ember中使用REST序列化器。我花了很多时间在这种奇怪的行为上但却无法理解任何事情。
我很乐意接受任何帮助:)
答案 0 :(得分:1)
Adapters确定EmberData如何与后端一起使用。它通常包括URL格式和请求标头。
Serializers确定如何处理和格式化数据。因此,在您的情况下,您只需要在将数据发送到后端时更改数据格式。要实现这一点,您应该override serialize
method。
例如:
import DS from 'ember-data';
export default DS.JSONSerializer.extend({
serialize(snapshot, options) {
var json = this._super(...arguments);
var res = json.data;
return data;
}
});
它将从请求中删除根节点data
。因此,您可以在发送之前将json转换为所需的结构。
答案 1 :(得分:0)
Crabdar的回答是您需要学习如何做的。如果你可以切换到使用cerebris jsonapi-resources gem,你应该能够毫无问题地使用ember jsonapi适配器。这是一个非常成熟的实现