Rest 存储在emberjs中,不从服务器加载最新数据(如果在服务器端删除)

Rest 存储在emberjs中,不从服务器加载最新数据(如果在服务器端删除),rest,ember.js,ember-data,Rest,Ember.js,Ember Data,在我的余烬应用程序中有一个/usersurl。我正在使用RESTAdapter从服务器获取数据。当加载显示用户列表的模板时,它会从服务器加载最新更新的数据(例如,如果我更改了users表中的一行,比如更改了用户名,我也会在前端得到反映)但如果我从数据库中删除该用户,我仍然会在前端的用户列表中找到该用户 用于用户的模型钩子路由仅返回来自服务器的用户列表: this.store.find('user').then(onSuccess, onError); 当我尝试对已删除的用户执行任何操作(比如在

在我的余烬应用程序中有一个
/users
url。我正在使用
RESTAdapter
从服务器获取数据。当加载显示
用户列表的模板时,它会从服务器加载最新更新的数据(例如,如果我更改了users表中的一行,比如更改了用户名,我也会在前端得到反映)但如果我从数据库中删除该用户,我仍然会在前端的用户列表中找到该用户

用于用户的模型钩子路由仅返回来自服务器的用户列表:

this.store.find('user').then(onSuccess, onError);

当我尝试对已删除的用户执行任何操作(比如在前端更新其名称)时,我会收到一个错误(这是显而易见的,因为该用户已不在数据库中,服务器会以适当的错误进行响应)。如何强制emberjs加载数据库中而不仅仅是本地ember数据存储中的用户列表?另外,为什么本地ember数据存储与数据库同步以进行更新(以及添加),而不进行删除?

这似乎是ember JS中已知的一个问题。我偶然发现的解决方法是:向
find()
方法提供任意参数,加载的数据将与从服务器获取的数据相同。 下面的一个示例显示,
xyz
参数与值
abc
一起传递

this.store.find('user', {xyz:"abc"}).then(onSuccess, onError);
我不确定这是否是正确的方法,但它对我有效。其他解决方案是链接中提到的解决方案(如从服务器发送一些元数据,即维护已删除记录的列表)

但我仍然不明白为什么只在
删除
的情况下会发生这种情况(而在
发布
放置
的情况下不会发生这种情况)


我不确定这是否真的是一个问题,或者我只是不太理解。如果您对此有任何帮助或意见,我们将不胜感激。

问题将在网站上解释

对于每个模型类型,存储区都有一个缓存,然后当存储区使用该方法获取数据时,它不会假定正在返回所有数据,因此应用以下步骤

store.pushMany(type, payload); // push the server response data to the local store
store.didUpdateAll(type); // update record with the most up-to-date record     
return store.all(type);  // return all the record in the local store
它不会考虑任何记录删除,因为在本期中讨论了这一点。在这种情况下,如果找不到具有相同primaryKey的记录,则新的响应数据将添加到本地存储,或者在另一种情况下,它将更新本地副本

我创建了一个测试来检查定义的行为:

测试('store.findAll不管理记录删除',函数(){

$.mockjaxClear()

$.mockjax({url:'/categories',数据类型:'json',响应文本:{

 categories:[
    {id: 1, name: "Name1"},
    {id: 2, name: "Name2"}
   ]}});
var store=this.store();
停止();
store.find('category')。然后(函数(结果){

}))

}))

正如您所指出的,类似find('modelName',{})的东西可以解决您的问题:

this.store.find('user', {})

要解决此问题,可以从存储中卸载所有记录,然后调用find():


嘿@ppcano,非常感谢你的建议,它工作得很好。但是如果模型是为动态路由加载的呢?说
this.store.find('user',some_id);
。在这种情况下,我如何从服务器而不是从本地余烬数据强制获取内容?store.getById('user',id)与record.reload()结合使用@用户2745266,如果回答正确,请将问题标记为正确。
this.store.find('user', {})
this.store.unloadAll('user');
this.store.find('user').then(
  function(d) { 
    console.log(d.get('length')); // store now only contains the users returned from the server
  }
);