让我们先从一个常见的场景,你必须对模型的计算性能:Emberjs捉住22 - 父计算性质计算的hasMany相关对象
型号/ coney.js
bunniesTotal: Ember.computed.alias('babyBunnies.length')
比方说入口点的应用程序是显示索引页的所有Coneys
:
routes/coneys/index
的API返回所有Coneys
但它的分页,所以只有50出现每页(很棒,我们不想太多的兔子跑来跑去吗?)
随着每个康尼(父母的兔子)来所有的孩子(因为只有他们的几个,他们只是littl'uns - 即。小有效载荷!)
因此,bunniesTotal
将始终准确,您可以在coneys/index
页面上的每个Coney
列表上看到它。伟大的,美妙的,你在Ember教程中看到的一个常见例子。 沉闷的善良。
更灰烬善良 - 用户后访问/coneys/new.js
,并增加了一个新的Coney
和一些BabyBunnies
,用户将自动看到上面bunniesTotal
更新,当他们回来/coneyes/index
,由于新BabyBunny在灰烬
商店
沃伦。水下降,来吧!
现在,让我们前往未来并将我们的
数据
warren缩放。呃哦。
现在Coneys有成千上万的儿童,也许数以千计的孙子太(是啊,兔子,去数字!)
它没有任何意义,现在,在coneys/index
页面上,加载所有ALL的BabyBunnies首先击中50个Coneys。不好。因此,我们修改API并删除BabyBunnies
,以便每个Coney
都必须单独请求它们(例如,例如,当您转到coneys/edit
时)。因此,让我们修改API并删除BabyBunnies
,以便每个Coney
都必须单独请求它们(例如,当您转到coneys/edit
时)。
但是......你对计数做了什么?现在客户不知道每个家长可能有多少个孩子。
您可以在API中的每个父代中包含一个属性,而不是在Ember中。所以,现在你计算服务器上的孩子,并将其发送给Ember。也许是meta.children_total
或只是模型上的一个属性。嗯不错。
但现在当用户在客户端上添加一个子项时,总数不会自动更新。你已经损失了Ember善良并且你的索引页在用户眼中已经“退化”了。
用户在添加新的“子”并重定向到coneys/index
后,将看不到总更新。他们会认为有些事情是错的。发生了什么新的
宝宝兔子
刚刚创建的孩子?
所以,在那个小时间旅行的文章之后,这里是问题。
是否有一些Ember的方式来解决这个Catch-22?
也许在向其添加子项后,父级的后台刷新。或者只是为父母或其他一些Ember魔术请求元数据?
我看过ds-references和发生在该功能上的discussion,但都没有帮助我看到该问题推荐的解决方案是/应该是什么。
UPDATE
在这种DS-引用链接有这样的说法:
检索有关记录或关系
服务器提供的元数据和这个代码:
var meta = post.hasMany('comments').meta();
console.log(`${commentIds.length} comments out of ${meta.total}`);
因此,这意味着答案是有一个由服务器提供的BabyBunnies(儿童)元总。 meta.total
将会是所有孩子的总数。
但是,这会导致另外两个问题:
当用户添加了一个新的婴儿,并将其保存到存储/沃伦和 因此服务器,如何灰烬拿到新的总?它会做一些 背景魔术只检索总数?我怀疑没有,并且 ,我必须手动请求BabyBunny端点刚刚获得 新的总和。
如果该元总实际上不是一个 '原' 总,但这:
meta.totalFemaleBabyBunnies
meta.totalMaleBabyBunnies
我怎么没看到灰烬可以更新此类总数而不会触发BabyBunny终点的刷新(这意味着每次添加新宝贝时都会这样做)
Ha你有这个问题吗?如果是这样,你做了什么来解决它?