【问题标题】:How does one observe changing query parameters in Ember?如何观察 Ember 中查询参数的变化?
【发布时间】:2014-03-15 01:49:35
【问题描述】:

如何观察 Ember.js 中的多个查询参数,使用 query-params-new,而不在 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');
    });
},

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

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    当查询参数发生变化时,动作queryParamsDidChange 被触发。这可以在控制器或路由中使用,以在查询参数更改时触发您需要运行的任何逻辑。

    例子:

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

    Example jsbin 来自the PR

    【讨论】:

    • 仅供参考,但如果您希望查询参数更改为“bubble”,您需要在您的queryParamsDidChange 版本中调用this._super(...arguments)。此外,该函数接收一个包含更改的查询参数键及其值作为参数的对象,这对于找出更改的内容非常有用。
    猜你喜欢
    • 1970-01-01
    • 2017-04-08
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多