Ember store.findAll 正在重新加载视图,而 store.query 则没有

elo*_*elo 2 ember.js ember-data

目前,当一篇文章添加到商店时,当我在路由中使用 store.query() 过滤服务器端时,我的视图不会更新,但当我使用 store.findAll() 过滤客户端时,它会更新。

使用findAll,过滤客户端

//route.js
model() {
return this.get('store').findAll('article');
}

//controller.js
articleSorted: computed.filterBy('model', 'isPublished', true),
Run Code Online (Sandbox Code Playgroud)

并带有查询过滤服务器端

//route.js
model() {
  return this.get('store').query('article', { q: 'isPublished' }),
}
Run Code Online (Sandbox Code Playgroud)

事实是 findAll 正在重新加载,而 query 则没有。

我发现了这个但不明白 https://github.com/emberjs/ember.js/issues/15256

rea*_*ate 5

谢谢你的提问。我会尽力回答这个问题,但似乎应该在 Ember 指南中添加更多文档来解释这种情况

本质上this.store.findAll()this.store.query()做两件截然不同的事情。被设计为所有实体(在您的情况下为文章)的findAll()表示,因此当商店找到更多它应该关心的文章时,结果将自动更新是有意义的。它这样做是因为它不返回文章数组,而是返回一个会自动更新的数组。DS.RecordArray

query()另一方面,旨在每次询问后端期望的结果是什么,并且您通常将许多参数传递给query()后端用于查找或过滤结果的调用。前端不可能确切地知道后端如何解释这些查询参数,因此当添加满足相同查询的新文章时,前端不可能“自动更新”。

那有意义吗?您想让我说得更详细吗?