Ember 了解序列化器和适配器
Ember understanding serializers and adapters
我的前端应用程序(ember 2.3.1,ember-data 2.3.3)和后端(rails 5 与 jsonapi 序列化程序)之间的通信很麻烦。
我会尽量描述我遇到的所有情况。
在后端,我想在 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 中的序列化器从 rest 更改为 jsonapi 时,一切都会正常工作。但是请求以 jsonapi 格式进入后端。我收到了下一个参数 {"data"=>{"attributes"=>{"title"=>"test"}, "type"=>"projects"}, "controller"=>"projects", "action"=>"create", "project"=>{}}
而不是 {"project"=>{"title"=>"qwe"}, "controller"=>"projects", "action"=>"create"}
我不明白为什么 rest 序列化器和 jsonapi 适配器会相互影响以及如何在 ember 中使用 REST 序列化器。我在这种奇怪的行为上花了很多时间,但什么都看不懂。
我很乐意接受任何形式的帮助:)
Adapters 确定 EmberData 如何与后端一起工作。它通常包括 URL 格式和请求 headers.
Serializers determine how data will be processed and formatted. So, in your case, you just need to change data format when data will be send to backend. To implement this, you should 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 转换为您想要的结构。
Crabdar 的答案是您需要学习如何做的。如果您可以切换到使用 cerebris jsonapi-resources gem,您应该能够毫无问题地使用 ember jsonapi 适配器。这是一个相当成熟的实现
我的前端应用程序(ember 2.3.1,ember-data 2.3.3)和后端(rails 5 与 jsonapi 序列化程序)之间的通信很麻烦。
我会尽量描述我遇到的所有情况。
在后端,我想在 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 中的序列化器从 rest 更改为 jsonapi 时,一切都会正常工作。但是请求以 jsonapi 格式进入后端。我收到了下一个参数 {"data"=>{"attributes"=>{"title"=>"test"}, "type"=>"projects"}, "controller"=>"projects", "action"=>"create", "project"=>{}}
而不是 {"project"=>{"title"=>"qwe"}, "controller"=>"projects", "action"=>"create"}
我不明白为什么 rest 序列化器和 jsonapi 适配器会相互影响以及如何在 ember 中使用 REST 序列化器。我在这种奇怪的行为上花了很多时间,但什么都看不懂。
我很乐意接受任何形式的帮助:)
Adapters 确定 EmberData 如何与后端一起工作。它通常包括 URL 格式和请求 headers.
Serializers determine how data will be processed and formatted. So, in your case, you just need to change data format when data will be send to backend. To implement this, you should 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 转换为您想要的结构。
Crabdar 的答案是您需要学习如何做的。如果您可以切换到使用 cerebris jsonapi-resources gem,您应该能够毫无问题地使用 ember jsonapi 适配器。这是一个相当成熟的实现