簡體   English   中英

難以理解的序列化器和適配器

[英]Ember understanding serializers and adapters

我在前端應用程序(ember 2.3.1,ember-data 2.3.3)和后端(帶有jsonapi序列化程序的rails 5)之間的通信令人煩惱。

我將嘗試描述我遇到的所有情況。

在后端,我想以jsonapi發送響應並獲取REST格式的請求。 我正在使用序列化程序,以及如何檢查后端發送正確的響應。 例如{"data":[{"id":"1","type":"projects","attributes":{"title":"one"},"links...

在余燼方面,我定義了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")當我從靜止燼改為串行到jsonapi一切會正常工作。但要求將后端的jsonapi格式。我已經收到下一PARAMS {"data"=>{"attributes"=>{"title"=>"test"}, "type"=>"projects"}, "controller"=>"projects", "action"=>"create", "project"=>{}}代替{"project"=>{"title"=>"qwe"}, "controller"=>"projects", "action"=>"create"}

我不明白為什么其余序列化器和jsonapi適配器會相互影響,以及如何在ember中使用REST序列化器。 我花了很多時間在這種奇怪的行為上,但什么也聽不懂。

我將很高興收到任何幫助:)

適配器確定EmberData如何與后端一起使用。 通常,它包括URL格式和請求標頭。

串行器確定如何處理和格式化數據。 因此,在您的情況下,您只需要在將數據發送到后端時更改數據格式即可。 要實現這一點,您應該重寫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轉換為所需的結構。

克拉伯達的答案是您需要學習如何做。 如果可以切換為使用cerebris jsonapi-resources gem,則應該可以使用ember jsonapi適配器而不會出現問題。 這是一個相當成熟的實現

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM