6

Ember モデル名と一致する JSON API 応答キーの「タイプ」に関する簡単な質問。

「models/photo.js」などのモデルがあり、「/photos」のようなルートがある場合、JSON API 応答は次のようになります。

{
  data: [{
    id: "298486374",
    type: "photos",
    attributes: {
      name: "photo_name_1.png",
      description: "A photo!"
    }
  },{
    id: "298434523",
    type: "photos",
    attributes: {
      name: "photo_name_2.png",
      description: "Another photo!"
    }
  }]
}

モデル名は単数形である必要があると想定していますが、このエラーが表示されます

Assertion Failed: You tried to push data with a type 'photos' but no model could be found with that name

これはもちろん、私のモデルの名前が「写真」だからです。

現在、JSON API 仕様には、「この仕様は語形変化規則にとらわれないため、型の値は複数形または単数形のいずれかになります。ただし、実装全体で一貫して同じ値を使用する必要があります。」というメモがあります。

そう、

tl;dr モデル名と JSON API 応答キーの「タイプ」の両方を単数形にする「Ember 方式」ですか? それとも一致していれば問題ありませんか?

4

2 に答える 2

7

JSON API シリアライザーは複数型を想定しています。ガイドからのペイロードの例。

関数はキーを単数形にするためmodelNameFromPayloadKey、単数型で機能します。

// as is
modelNameFromPayloadKey: function(key) {
  return singularize(normalizeModelName(key));
}

payloadKeyFromModelNameただし、バックエンドで単数型を使用する場合、逆の操作はモデル名を複数形にするため、変更する必要があります。

// as is
payloadKeyFromModelName: function(modelName) {
  return pluralize(modelName);
}

内部の Ember Data JSON API 形式は、JSONAPISerializer で使用されるものとは少し異なることに注意してください。は単数Store.push型を期待し、JSON API シリアライザーは複数型を期待します。

議論から:

"...ED は、使用しているアダプター/シリアライザーに関係なく、キャメルケース属性と特異型を内部で使用します。

JSON API アダプター/シリアライザーを使用している場合、ユーザーが jsonapi.org で入手可能なサンプルを使用して、それを機能させることができるようにしたいと考えています。シリアライザーが作業を処理するため、ほとんどのユーザーは内部フォーマットを気にする必要はありません。

これはガイドに記載されていますhttp://guides.emberjs.com/v2.0.0/models/pushing-records-into-the-store/ ..."

于 2015-09-28T21:40:21.690 に答える