Javascript Ember 2.x DS和关系更新

Javascript Ember 2.x DS和关系更新,javascript,ember.js,Javascript,Ember.js,我有一个需要获取数据的Ember 2.x web应用程序,它有许多关系:许多“站点”有许多“服务器”和许多“客户端” 为了获取内容,我执行以下操作: model() { return this.store.findAll('client').then(() => { console.info('clients : OK'); return this.store.findAll('server'); }).then(() => { console.inf

我有一个需要获取数据的Ember 2.x web应用程序,它有许多关系:许多“站点”有许多“服务器”和许多“客户端”

为了获取内容,我执行以下操作:

model() {
  return this.store.findAll('client').then(() => {
    console.info('clients : OK');
    return this.store.findAll('server');
  }).then(() => {
    console.info('servers : OK');
    return this.store.findAll('site');
  }).then((sites) => {
    console.info('sites : OK');
    return sites;
  });
}
也就是说,好的,所有内容都已下载并按预期显示在屏幕上

我的应用程序有一个Socket.IO客户端,它接收一些简单的通知,告诉它应该重新加载所有“服务器”(因为“活动”值已经更新)。因此,我只执行一个findAll(“服务器”),因为我只想更新服务器:

this.socket.on('reload-servers', () => {
  that.store.findAll('servers');
});
Chrome的余烬数据检查器会更新为新值,但不会更新网页中的“我的网站”内容

我的问题是:为什么?我想这个解决方案并不像我想象的那么神奇,但经过几个小时的研究,我还是没能做到

我也不确定这样做是否正确。我在谷歌上尝试了很多搜索,但只找到了不适用于Ember 2的Ember 1示例,或者建议重新加载所有内容。

根据文档-findAll要求适配器的findAll方法查找给定类型的记录,并返回一个承诺,该承诺将在服务器返回值后得到解决。承诺将解析为存储中存在的所有此类记录,即使服务器仅返回其中的一个子集。”

你能试试这样的东西吗

return this.store.findAll('servers').then(function(servers){
   return servers;
  });

我通过使用更好的代码体系结构解决了我的问题

我不能发布任何代码示例,因为我已经更改了很多东西。关于这一点,我只能说我现在使用的是一个服务,它执行findAll请求,并为我的vars提供一些计算属性和观察者


我将此服务注入每个需要使用获取的数据或计算值的组件中。现在一切正常。

在何处获取所述内容?在路由模型挂钩中?我认为这不正确。我首先从model()获取内容。我已更正了上面的代码。我忘记编写“返回站点;“行。这部分正在做我期望它做的事情。但也许你告诉我这是一个糟糕的设计?我已经尝试过了,但是:第一次返回无法完成,因为它在套接字io事件回调中。返回'then'值仍然返回具有相同解析答案的承诺。
return this.store.findAll('servers').then(function(servers){
   return servers;
  });