嵌入数据-懒惰地加载模型的子数据,而无需重新创建以前创建的对象

hiz5n14c  于 2022-10-20  发布在  其他
关注(0)|答案(1)|浏览(169)

我是新成员数据。我正在尝试使用多个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中重新加载注解列表组件。
在不创建已经存在的对象的情况下,有没有其他方法将数据分解为惰性加载关系?

bnlyeluc

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辛烷开始,您根本不应该使用计算属性,它们已经被实际的getterstracked属性取代。
i1 j2 k1 l
Ember是一个很棒的框架,祝你旅途好运!

相关问题