簡體   English   中英

如何重新加載 ember-data 與 ember octane 中的 hasMany 關系?

[英]How to reload hasMany relationship in ember-data with ember octane?

從 3.9 升級到 Ember 3.21.2 后,重新加載 hasMany 關系不再正常工作。 例如,下面的 model 掛鈎為用戶獲取可編輯內容不再更新用戶 model。

model(params) {
    const { user } = this.modelFor('application')

    const requestParams = this.mapParams(params)

    return RSVP.hash({
      user,
      results: user.hasMany('editableContents').reload({
        adapterOptions: requestParams
      })
    })
  },

它仍然會觸發請求,但它會為每個請求加載相同的內容,即使請求參數已更改。 最初,請求被發送到/users/:user_id/editable-contents?filter=.....

更改適配器選項后,它將對每個內容的請求發送到/contents/:content_id

我們認為 .reload() function 是罪魁禍首,因為我們發現 .hasMany('editableContents').reload() 沒有跳轉到我們的應用程序適配器中的 findHasMany() 鈎子,而是調用 findRecord()每條記錄。

我們正在使用:

"ember-cli": "~3.21.2",
"ember-data": "~3.21.0"

任何幫助表示贊賞。 謝謝!

在 Ember 的 Discord 服務器上的用戶 sly7-7 的幫助下,我們找到了正確的方向。

真正的問題是我們的有效負載缺少“相關”鏈接,因為分頁有效負載不包含該鏈接。 在實施以下塊的 ember-data 更改之前,丟失的相關鏈接不是問題,如果payload.links.related未定義,則永遠不會調用該塊:

if (payload.links) {
      let originalLinks = this.links;
      this.updateLinks(payload.links);
      if (payload.links.related) {
        let relatedLink = _normalizeLink(payload.links.related);
        let currentLink = originalLinks && originalLinks.related ? _normalizeLink(originalLinks.related) : null;
...
}

見: https://github.com/emberjs/data/blob/ff4f9111fcfa7dd9e39804ed17f5af27a4a01378/packages/record-data/addon/-private/relationships/state/relationship.ts#L633

作為一種解決方法,我們覆蓋了應用程序序列化程序中的normalizeArrayResponse()鈎子,如果沒有相關鏈接,則將相關鏈接設置為基本請求鏈接:

normalizeArrayResponse(store, primaryModelClass, payload, id, requestType) {
  if (payload.links && payload.links.first && !payload.links.related) {
    const baseLink = payload.links.first.split('?')[0]
    if (isRelationshipLink(baseLink)) {
      payload.links.related = baseLink
    }
  }
}

使用這種解決方法,它也使用一種相當老套的方法來查看鏈接是否是關系鏈接,the.reload() function 在我們的應用程序中再次全局工作。

為了安全起見,我們還將查看是否可以將相關鏈接與后端響應一起發送,這將比上述解決方法更干凈。

暫無
暫無

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

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