我是新成员数据。我正在尝试使用多个API调用从API加载注解列表。评论列表功能如下所示,
- 注解对象可以有父注解或子注解(回复)
- 使用第一个API调用,来自不同评论线程的所有评论(子评论和父评论)都会在单个评论列表中列出。
- 如果用户点击上面列表中的特定评论,它将提示相应的评论线程。使用第二次API调用加载相应的父或子注解
评论模型如下实现,
export default CommentModel.extend( {
parent: computed(function() {
return get(this, 'store').queryRecord('comment', {
_overrideURL: `comments/${get(this, 'id')}/parent`,
});
}),
children: computed(function() {
return get(this, 'store').query('comment', {
_overrideURL: `comments/${get(this, 'id')}/children`,
});
}),
...
在这个实现中,如果用户点击评论列表中的子评论(回复),第二个API调用将加载相应的父评论和父评论,并再次加载其子评论。该行为导致在UI中重新加载注解列表组件。
在不创建已经存在的对象的情况下,有没有其他方法将数据分解为惰性加载关系?
1条答案
按热度按时间bnlyeluc1#
如果您真的需要走这条路,您可以尝试执行
findRecord
而不是queryRecord
,并使用adapterOptions
自定义模型的适配器urlForFindRecord
方法。TL;博士
为什么不应该:
IMHO,您在建议的设计中存在数据流问题。
您不应该在计算属性内执行异步代码(也不应该将不可变对象作为
queryRecord
响应返回)。Tasks work great for that purpose.升
您不应该让模型加载数据(这应该是路由的责任),这违反了MVC和DDAU原则。
There is this great article from 2015 on that
事实上,从ember辛烷开始,您根本不应该使用计算属性,它们已经被实际的getters和tracked属性取代。
i1 j2 k1 l
Ember是一个很棒的框架,祝你旅途好运!