ember.js 控制器中的排序模型

Posted

技术标签:

【中文标题】ember.js 控制器中的排序模型【英文标题】:ember.js Sorting model in controller 【发布时间】: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 的答案中链接),但这只是一个建议。 【参考方案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']),
  ...

【讨论】:

以上是关于ember.js 控制器中的排序模型的主要内容,如果未能解决你的问题,请参考以下文章

使用 Ember.js 按模型类型/对象值选择视图模板

Ember文档理解 - 模板是否链接到模板?

Ember.js 使用路由器架构获取父路由的控制器

Ember.js 如何获取需要嵌套的控制器名称

如何创建与 Ember.js 和 Rails 关联的 belongsTo 记录?

如何处理 ember.js 模型中的标签