Ember.js 如何重新加载灰烬数据中的灰烬辛烷值?
从3.9升级到Ember 3.21.2后,重新加载hasMany关系不再正常工作。例如,以下用于为用户获取可编辑内容的模型挂钩不再更新用户模型Ember.js 如何重新加载灰烬数据中的灰烬辛烷值?,ember.js,ember-data,ember-cli,Ember.js,Ember Data,Ember Cli,从3.9升级到Ember 3.21.2后,重新加载hasMany关系不再正常工作。例如,以下用于为用户获取可编辑内容的模型挂钩不再更新用户模型 model(params) { const { user } = this.modelFor('application') const requestParams = this.mapParams(params) return RSVP.hash({ user, results: user.hasMan
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\u id/editable contents?filter=……
更改适配器选项后,它会将每个内容的请求发送到/contents/:content\u id
我们认为应该归咎于.reload()函数,因为我们发现.hasMany('editableContents').reload()不会跳转到应用程序适配器中的findHasMany()钩子,而是为每条记录调用findRecord()
我们正在使用:
"ember-cli": "~3.21.2",
"ember-data": "~3.21.0"
感谢您的帮助。谢谢 在Ember的Discord服务器上的用户sly7-7的帮助下,我们找到了正确的方向 真正的问题是我们的有效负载缺少“相关”链接,因为分页的有效负载不包含该链接。在执行以下块的ember数据发生更改之前,缺少相关链接不是问题,如果未定义
有效负载,则永远不会调用该块。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;
...
}
见:
作为一种解决方法,我们覆盖了应用程序序列化程序中的normalizearraysponse()
钩子,如果没有相关链接,则将相关链接设置为基本请求链接:
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
}
}
}
有了这种变通方法,.reload()函数在我们的应用程序中再次全局工作。这种变通方法还使用了一种相当粗糙的方法来查看链接是否是关系链接
为了安全起见,我们还将查看是否可以通过后端响应发送相关链接,这将比上述解决方法更干净。现在在Ember 3.25.1和Ember Data 3.25.0上遇到相同的问题。更奇怪的是,它适用于某些模型,但不适用于其他模型。请查看我的答案,希望解决方法能帮助您。非常感谢您解决这个问题!可以确认这也是由于我们的设置中缺少
相关的链接造成的。我想知道这是否是余烬数据中的错误?