我有一个主路由/projects
,它从API获取一些记录:return this.store.findAll('project', {reload: true});
该页面上还有一个搜索框,它将命中相同的API,但具有查询参数:return this.store.find('project', params);
,很明显,这会将地址栏中的URL更改为类似/projects?q=acme
的内容,并且只显示从查询返回的记录。路由和模板不会更改,我只是尝试换出模型数据。
我的路线代码:
model: function(params) {
if (params.q) {
return this.store.find('project', params);
} else {
return this.store.findAll('project', {reload: true});
}
},
queryParams: {
q: {
refreshModel: true
}
},
我的问题是,当您从这个查询返回时,它显示了从第一次点击页面开始的所有记录加上搜索到的记录,而实际上我希望它做的只是再次从API中请求默认数据。我不想使用不正确的术语,但我认为我希望重新加载存储,但使用{reload: true}
似乎没有任何区别。
清除查询参数时,如何从存放区重新载入新的数据?
更新:我确认refreshModel: true
确实发出了另一个API调用,但问题仍然是存储保留了它以前拥有的任何东西,而不是使用响应从头重新加载存储。因此,我在代码中有了这个,但当从projects
的子路由返回到/projects
时,这会导致问题。
var _this = this;
Ember.run(function() {
_this.store.unloadAll('project');
});
1条答案
按热度按时间eqfvzcg81#
你可以使用路由的queryParams,来使它们在查询改变时重新加载:
注意queryParam还有很多其他的选项可以使用,如果这个简单的解决方案不起作用,还有很多其他的阅读。http://guides.emberjs.com/v1.10.0/routing/query-params/