2016-09-16 70 views
1

所以我有这个应用程序与一个页面,其中包含一个可以过滤的列表。查询参数删除和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很新,所以我想我会在提交错误报告之前寻求帮助。

那么有什么我失踪?或者是这种设计/某种设计限制?

谢谢!

+1

只是想,而不是仅仅去除其设置为默认值空'“”',将重新加载就是我怎么做我queryParams。 – kumkanillam

+0

哦,是的,这就是我在此期间所做的,参数不会被删除,'refreshModel'触发刷新,但这不是最佳的。目前这不是什么大问题(除了它生成的丑陋URL),但是空字符串与undefined/null字符串并不是一回事,我可以看到它在某些字段上成为问题。例如,对于增值税号码,我想'过滤[增值税] ='只过滤没有(空白)增值税号码的收据,但我仍然希望能够完全禁用过滤。 – blue

+1

@blue此问题:https://github.com/emberjs/ember.js/issues/10577可能有帮助吗?查询参数非常棘手;我不确定这是否是一个错误。作为一种解决方法,您可以尝试从您的控制器发送操作以触发您的路由中的刷新操作:http://emberjs.com/api/classes/Ember.Route.html#method_refresh –

回答

1

如果有什么,而不是使用transitionToRoute,您通过下列方式更新您的控制器上绑定的查询参数?

的代码是这样:

export default Ember.Controller.extend({ 

    queryParams: { 
    'filter[name]': { 
     refreshModel: true 
    }, 
    }, 

}); 

changeFilters() { 
    var params = {}; 
    if (this.get('nameFilter')) { 
    this.set('filter[name]', this.get('nameFilter')); 
    } 
    [...] 
} 

我不知道这是否会工作,但你可以给它一个镜头。

+0

问题在于,更改控制器中的属性不会更改URL,并且我希望我的客户端能够在彼此之间共享URL,包含过滤器。也许某种混合可以工作,但即使如此,我不认为在控制器中设置“filter [name]”属性会自动将其设置在路由中。 – blue

+0

@blue指南说,更改控制器中的属性将更新URL:https://guides.emberjs.com/v2.8.0/routing/query-params/#toc_specifying-query-parameters - “...对URL中的类别查询参数所做的任何更改都会更新控制器上的类别属性:文章,反之亦然。“ –

+0

噢,好吧,那很完美!非常感谢! – blue