所以我有这个应用程序与一个页面,其中包含一个可以过滤的列表。查询参数删除和refreshModel
列表背后的数据可能非常大,因此通过发送与JSONAPI参考(例如?filter[name]=John&filter[date]=2016-09-12|2016-09-15
)中的参数非常相似的过滤器参数在服务器端完成过滤。
为了做到这一点,我已经建立了我的路线如下:
export default Ember.Route.extend(AuthenticatedRoute, {
queryParams: {
'filter[name]': {
refreshModel: true
},
[...]
},
model(params) {
return this.store.query('receipt', params);
}
});
这使得路线的查询参数复制到API调用没有任何问题。
现在,当然,用户必须能够过滤器从他的界面更改,对不对?所以我做了一点点引导模式/形态,并在我的控制器的作用,它建立了一套查询参数,并与他们重新加载路线迷上它:
changeFilters() {
var params = {};
if (this.get('nameFilter')) {
params['filter[name]'] = this.get('nameFilter');
}
[...]
this.transitionToRoute({queryParams: params});
}
这样做实际上没有很好地工作。当在查询中添加或更改filter[name]
参数时,路由将刷新并更新模型。但是,用户禁用过滤器时会出现问题:即使refreshModel
设置为true,移除查询参数似乎也不会刷新路由。
所以,我非常确定这是一个错误,因为它对我没有任何意义,但是在此期间我对Ember很新,所以我想我会在提交错误报告之前寻求帮助。
那么有什么我失踪?或者是这种设计/某种设计限制?
谢谢!
只是想,而不是仅仅去除其设置为默认值空'“”',将重新加载就是我怎么做我queryParams。 – kumkanillam
哦,是的,这就是我在此期间所做的,参数不会被删除,'refreshModel'触发刷新,但这不是最佳的。目前这不是什么大问题(除了它生成的丑陋URL),但是空字符串与undefined/null字符串并不是一回事,我可以看到它在某些字段上成为问题。例如,对于增值税号码,我想'过滤[增值税] ='只过滤没有(空白)增值税号码的收据,但我仍然希望能够完全禁用过滤。 – blue
@blue此问题:https://github.com/emberjs/ember.js/issues/10577可能有帮助吗?查询参数非常棘手;我不确定这是否是一个错误。作为一种解决方法,您可以尝试从您的控制器发送操作以触发您的路由中的刷新操作:http://emberjs.com/api/classes/Ember.Route.html#method_refresh –