2015-08-21 17 views
0

我有以下資源如何配置Ember-data以將依賴項與父對象組合在一起?

  1. 問題/ API/V1 /問題/ {questionID}
  2. 類別/ API/V1 /分類/ {questionID}
  3. 評論/ API/V1 /評論/ {questionID }
  4. 建議/ API/V1 /推薦/ {} questionID
  5. 格局答案/ API/V1/patternanswers/{} questionID

這個API是通過父對象ID來傳遞子對象的,並且我沒有看到與Ember數據開箱即用(或者沒有黑客入侵,只有正確的配置)兼容。

問題資源讓我JSON是這樣的:

{ 
    "errors": [], 
    "data": { 
     "created": 1439832769693, 
     "updated": 1440, 
     "userID": 20, 
     "user": { 
      "password": null, 
      "created": null, 
      "updated": null, 
      "photoID": null, 
      "photo": null, 
      "email": "[email protected]", 
      "emailConfirmed": false, 
      "phoneNumber": null, 
      "phoneNumberConfirmed": false, 
      "accessFailedCount": 0, 
      "id": 20, 
      "userName": "qwerty" 
     }, 
     "categories": [], // does not exist in json 
     "addCategoriesIDs": [], 
     "removeCategoriesIDs": [], 
     "recommendations": [], 
     "removeRecommendstionIDs": [], 
     "patternAnswers": [], 
     "removePatternAnswerIDs": [], 
     "comments": [], //does not exist in json 
     "hint": null, 
     "version": 1, 
     "commonVersion": 8, 
     "id": 7, 
     "questionText": "What is your name?", 
     "weight": 0, 
     "answerType": 0, 
     "status": 0, 
     "estimatedTime": null, 
     "private": false 
    } 
} 

屬性 「patternAnswers」, 「建議」 是在的問題,但 「意見」 和 「類別」 都沒有。 更多我沒有得到與列出的屬性充滿了依賴對象的ID的問題。我希望我能得到

{ 
    "errors": [], 
    "data": { 
     "comments" : [11,12,13,14], 
     "categories" : [21,22,23,24], 
     "recommendations": [1,2,3,4], 
     "removeRecommendstionIDs": [], 
     "patternAnswers": [5,6,7,8], 
     "removePatternAnswerIDs": [], 
     "hint": null, 
     "version": 1, 
     "commonVersion": 8, 
     "id": 7, 
     .... 
    } 
} 

..但它們是空的:(

我想配置我的問題型號和序列化問題異步抓住所有的依賴對象。

我想讓一切都只是發出

var QuestionModel = this.store.find('question',7); 
var comments = QuestionModel.get('comments'); 
var categories= QuestionModel.get('categories'); 
var recommendations= QuestionModel.get('recommendations'); 
var patternAnswers= QuestionModel.get('patternAnswers'); 

它是如何可行?

回答

0

如果您希望在開箱即用的情況下工作,您應該根據餘燼指南(http://guides.emberjs.com/v2.0.0/models/the-rest-adapter/)設置您的API。這就是說,端點必須是:

  1. 問題/ API/V1 /問題/ {questionID}
  2. 類別/ API/V1 /分類/ {的categoryID}
  3. 評論/ API/V1 /評論/ { commentID}
  4. 建議/ API/V1 /推薦/ {} recommendationID
  5. 格局答案/ API/V1/patternanswers/{} patternanswerID

而從GET/API/V1 /問題/ {有效載荷questionID}應該是這樣的:

{ 
    "question": { 
     "categories": [], // an array of ids 
     "recommendations": [], // an array of ids  
     "patternAnswers": [], // an array of ids 
     "comments": [], // an array of ids 
     "id": Number, // question id 
     ... // others 
    } 
} 

否則,您需要更改的DS.Model和/或RESTAdapter默認行爲,或者使用與QuestionController類別的連接模型,評論等,或者您也可以在收拾所有model事和setupController路線的鉤子表示該數據。

我建議你自己回答這些問題:

  1. 你真的需要在客戶端這樣一個複雜的模型?您可能需要模型的唯一原因是需要一次創建/更改該集合中的數據。
  2. 你可以改變API嗎?根據REST規範更改API更好,不要在客戶端維護意大利麪條。
  3. 您可以通過更改API多遠?還有另外一個類似的,但方案:

    問題/api/v1/questions/{questionID}

    類別/api/v1/questions/{questionID}/categories/{categoryID}

    分類/api/v1/questions/{questionID}/categories

這是一個有點容易在灰燼配置那麼你的版本。