簡體   English   中英

Ember 數據 - 將 id 以外的屬性用於 hasMany 關系

[英]Ember data - use property other than id for hasMany relationship

我的tagpayment模型之間定義了多對多關系,如下所示。

 //models/tag.js import Model, { attr, hasMany } from '@ember-data/model'; export default Model.extend({ name: attr('string'), backgroundColour: attr('string'), textColour: attr('string'), payments: hasMany('payment') });

 // models/payment.js import Model, { attr, hasMany } from '@ember-data/model'; export default Model.extend({ date: attr('date'), amount: attr('number'), paymentId: attr('string'), tags: hasMany('tag'), });

默認情況下,當我向付款添加標簽時,付款的id用作關系的鍵。 我的目標是讓 Ember 數據使用paymentId屬性作為這種關系的鍵。

下面的代碼段顯示了我正在加載的數據的結構,其中標簽通過paymentId屬性引用支付。

 // Example tag { "id": "25", "name": "Groceries", "backgroundColour": "31b04b", "textColour": "ffffff", "payments": ["20190121201902210"] // References paymentId rather than id }, // Example payment { "id": "1" "date": "2019-01-27T22:00:00.000Z", "amount": 1644.44, "paymentId": "20190121201902210", "tags": ["25"] }

我嘗試自定義付款序列化程序,如下所示,

 // serializers/payment.js import ApplicationSerializer from './application'; export default ApplicationSerializer.extend({ keyForRelationship(key, _relationship) { if (key === 'payments') { return 'paymentId'; } }, });

但是,當加載模型時,我收到此錯誤: Assertion Failed: All elements of a hasMany relationship must be instances of Model, you passed [ "20190121201902210" ]

在查找相關付款時,如何讓 Ember 數據使用paymentId而不是id

我假設您正在使用RESTSerializer 它有一個primaryKey選項,如果主鍵在您的 API 負載中未命名為id ,則應使用該選項

您的示例似乎有點困難,因為該記錄似乎有兩個主鍵: idpaymentId 如果只有其中一個用於引用相關記錄,我會建議簡單地忽略另一個。

如果兩者都用於引用相關記錄,則情況很糟糕。 也許您可以更改 API?

如果這是不可能的,我想您需要在序列化程序中將一個 ID 映射到另一個 ID,這需要之前加載付款記錄。 這變得棘手,因為序列化程序是同步的,這意味着必須先加載記錄。 我想你會面臨很多邊緣情況,直到這樣的解決方案穩定 - 打破它會很容易,因為它高度依賴於時間。

因此,也許您甚至應該考慮根本不將 Ember Data 用於這些資源。 這在很大程度上取決於每個資源都可以通過其類型和 ID 的組合來標識的假設。 但聽起來對您來說,同一個資源可以由兩個不同的 ID 標識。

暫無
暫無

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

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