【问题标题】:ember.js Sorting model in controllerember.js 控制器中的排序模型
【发布时间】:2018-06-20 05:04:47
【问题描述】:

ember.js 版本:2.18.0

型号:

export default DS.Model.extend({

  name: DS.attr('string'),
  description: DS.attr('string'),
  songs: DS.hasMany('song')
})

控制器:

export default Controller.extend({
  sortBy: ['name:asc', 'description:asc'],
  sortedBands: computed.sort('model', 'sortBy')
}

ember 给了我以下错误:

Only string, number, symbol, boolean, null, undefined, and function are allowed as default properties ember/avoid-leaking-state-in-ember-objects

【问题讨论】:

  • 你确定这是一个错误吗?究竟什么不起作用?我知道你在风格指南中发布的规则(在 Engwan 的答案中链接),但这只是一个建议。

标签: sorting ember.js controller computed-properties


【解决方案1】:

错误是因为您将数组设置为对象 (Controller) 中属性 (sortBy) 的默认值。

您可以在init 挂钩中设置数组值。

export default Controller.extend({
  sortedBands: computed.sort('model', 'sortBy'),

  init() {
    this._super(...arguments);
    this.sortBy = ['name:asc', 'description:asc'];
  }
}

查看此链接了解更多信息:https://github.com/ember-cli/eslint-plugin-ember/blob/master/docs/rules/avoid-leaking-state-in-ember-objects.md

【讨论】:

    【解决方案2】:

    我在使用空 js 对象作为控制器变量的默认属性时遇到了同样的错误。

    Object.freeze() 为我工作。

    解决问题的另一种方法:

    export default Controller.extend({
      sortedBands: Object.freeze(['name:asc', 'description:asc']),
      ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多