我有一个页面从服务器获取默认的数据列表,此页面还有一个搜索框,在运行时,它会更新查询参数并将新的数据列表返回到同一页面。这很好。
但是,当我清除搜索时(通过操作或在浏览器中点击“返回”),我想从服务器获取新的默认数据,替换搜索结果。
我认为我大部分都有这种方式,因为清除查询参数会导致findAll()
再次询问服务器数据,并且还会返回正确的数据,但商店会保留所有数据之前从搜索中检索到的记录,因此用户现在可以看到默认集 加上 他们从搜索中返回的记录。
那么,如何强制Ember Data使用从API返回的内容并覆盖商店中的内容?
这是我的路线代码。尽管有reload: true
和refreshModel: true
,但似乎两者都没有发生:
model: function(params) {
if (params.q) {
return this.store.find('project', params);
} else {
return this.store.findAll('project', {reload: true});
}
},
queryParams: {
q: {
refreshModel: true
}
},
提前致谢!
更新
我注意到生产环境没有这个问题。在Dev中,或者在运行ember serve --environment=development
时,数据未被清除,如果我在this.store.unloadAll('project')
之前使用findAll()
,它似乎清除了它,但随后给了我一个“在被破坏的对象上调用set“错误。但如果我做ember serve --environment=production
我没有任何错误。我不知道为什么会出现这种情况,但这不是我第一次在Dev中遇到大麻烦,只是发现正在运行的生产很好。