范围内的emberjs查询参数到控制器

时间:2016-01-28 21:28:31

标签: javascript ember.js

我在ember中定义了这样一条路径:

this.route('products', { path: '/t' }, function() {
  this.route('index', { path: '/:taxon' });
});

所以我可以访问以下网址:

  • /吨/球衣
  • /吨/鞋
  • /吨/等...

这些中的每一个也可能具有一系列查询参数。例如,我可以请求像/t/shirts?colour=red这样的红色衬衫。这很好,但我希望在控制器实例而不是模型中保留查询参数。因此,如果我正在搜索红色衬衫,然后转换为查看鞋子(通过{{#link-to}}),那么查询参数也将在该路线上可用,即/t/shoes?colour=red。目前我似乎无法做到这一点。

我在ember文档中找到了一些引用,指出我可以将showMagnifyingGlass的范围设置为" controller"这将完成我的意图,但它似乎没有工作。我用showMagnifyingGlass得到了错误的结局吗?我相信这一点是查询参数到控制器实例的范围,而不是模型,这样如果我点击一个改变路径模型的链接,它就不会影响查询参数。

这是我在控制器中包含的内容:

queryParams: [{
  showMagnifyingGlass: {
    scope: 'controller' // Scope the parameters to the controller so transitions share state.
  }
}]

1 个答案:

答案 0 :(得分:2)

您可以通过在顶级控制器上定义查询参数来实现此目的:

应用/产品/ controller.js

import Ember from 'ember';

export default Ember.Controller.extend({
  queryParams: ['color'],
  color: 'red'
});

然后将顶级控制器注入任何其他控制器:

应用/产品/索引/ controller.js

import Ember from 'ember';

export default Ember.Controller.extend({
  productsController: Ember.inject.controller('products'),
  color: Ember.computed.reads('productsController.color')
});

然后在其他控制器的链接上设置顶级查询参数:

应用/产品/索引/ template.hbs

{{link-to 'shirts' (query-params color=color)}}
{{link-to 'pants' (query-params color=color)}}
{{link-to 'shoes' (query-params color=color)}}

以下是an ember twiddle of the code above in actionmore info on injecting controllers