如何在Ember中观察更改查询参数?

时间:2014-03-15 01:49:35

标签: ember.js

如何使用query-params-new在Ember.js中观察多个查询参数,而无需在observes()property()中明确列出每个查询参数。

假设我有以下查询参数列表:

queryParams: [
    'first',
    'second',
    'third',
    'fourth',
    'fifth',
    'sixth',
    'seventh',
    'eighth',
    'ninth',
    'tenth'
],

first: null,
second: null,
third: null,
fourth: null,
fifth: null,
sixth: null,
seventh: null,
eighth: null,
ninth: null,
tenth: null

我想在控制器中有一个观察所有这些属性的方法,但不必列出它们,例如:

something: function() {
    ...
}.property('first', 'second', 'third', ...)

编辑:

我循环遍历queryParams数组,并在相应的属性上为每个数组设置一个观察者,如下所示:

init: function () {
    this._super();
    var queryParams = this.get('queryParams');
    var self = this;
    queryParams.forEach(function (param) {
        self.addObserver(param, self, 'updateSelectedOptionsIfQueryParamsChange');
    });
},

它按预期工作。有没有更好的方法来做到这一点,或者这是正确的吗?

1 个答案:

答案 0 :(得分:16)

当查询参数更改时,将触发操作queryParamsDidChange。这可以在控制器或路由中使用,以便在查询参数更改时触发您需要运行的逻辑。

示例:

App.ApplicationRoute = Ember.Route.extend({
  actions: {
    queryParamsDidChange: function() {
      // do some funky stuff
    }
  }
});
来自Example jsbin

the PR