我有一条主路线/projects
,可以从API中获取一些记录:return this.store.findAll('project', {reload: true});
此页面上还有一个搜索框,它会点击相同的API,但会显示查询参数:{{1显然,这会将地址栏中的URL更改为return this.store.find('project', params);
,并且仅显示从查询返回的记录。路线和模板不会改变,我只是想换掉模型数据。
我的路线代码:
/projects?q=acme
我的问题是,当你从这个查询导航回来时,它会显示所有记录,首先点击页面加上搜索到的记录,当我想要它真正做的只是要求时来自API的默认数据。我不想使用不正确的术语,但我认为我想要的是重新加载商店,但让 model: function(params) {
if (params.q) {
return this.store.find('project', params);
} else {
return this.store.findAll('project', {reload: true});
}
},
queryParams: {
q: {
refreshModel: true
}
},
似乎没有任何区别。
清除查询参数时如何从商店重新加载?
更新:我确认{reload: true}
确实发出了另一个API调用,但问题仍然是商店保留以前的内容,而不是使用响应来重新加载商店从头开始。因此,我在我的代码中有这个,但是当从refreshModel: true
的子路径回到projects
时会产生问题。
/projects
答案 0 :(得分:1)
您可以使用路由的queryParams,以便在查询更改时重新加载:
App.SomeRoute = Ember.Route.extend({
queryParams: {
q : {
refreshModel: true
}
},
model : function (params) {
if (params.q) {
return this.store.find('project', params);
} else {
return this.store.findAll('project', {reload: true});
}
}
});
请注意,如果这个简单的解决方案不起作用,queryParam可以使用各种其他选项,以及各种其他调整。以下是进一步阅读:http://guides.emberjs.com/v1.10.0/routing/query-params/