我有一些查询参数,当我从一条路线切换到另一条路线时,我不想放松。从文档中,解决方案似乎是使用全局查询参数,在ApplicationController
上设置。
我们说我的设置是:
ListController
。所有标准都必须是查询参数。我需要从ApplicationController
访问ListController
个全局查询参数进行一些操作。这很简单:
App.ListController = App.ArrayController.extend({
needs: "application",
qp: Ember.computed.alias("controllers.application"),
....
当条件更改时,过滤操作在服务器端完成,因此我需要在查询参数更改时刷新ListRoute
。
如何从ApplicationRoute
完成此操作?
App.ApplicationRoute = Ember.Route.extend({
actions: {
queryParamsDidChange: function () {
var listRoute = ??????;
listRoute.refresh();
}
}
}
您如何看待整个设置?我走在一条好路上吗?我不确定......
答案 0 :(得分:0)
这就是我所做的。
queryParams在路由中定义。这将是“父母”,对其子女有影响。
queryParams:
fooParam:
refreshModel: true
设置refreshModel:true将触发路由的beforeModel:
,model:
和afterModel:
挂钩以及所有后代路由。目前,没有办法为后代单独打开或关闭此行为。
及其控制器
queryParams: ['fooParam']
fooParam: null
控制器中的queryParams挂钩不会覆盖路由中的queryParams挂钩,而是整个功能工作的必要和补充。您不应将任何这些属于控制器中的任何属于路由,或属于控制器中的路由。
所有查询参数键也需要在控制器中定义。此挂钩的值只是默认值。它仍将根据查询参数进行更改。
然后,任何后代路线,
model: ->
this.modelFor('parent').filterBy('childAttribute', this.paramsFor('parent').fooParam)
或者如果你想要一个(默认情况下是第一个)记录:
model: ->
this.modelFor('parent').findBy('childAttribute', this.paramsFor('parent').fooParam)