【问题标题】:ember/avoid-leaking-state-in-ember-objects error for sorting property用于排序属性的 ember/avoid-leaking-in-ember-objects 错误
【发布时间】:2019-08-21 05:38:19
【问题描述】:
import Controller from "@ember/controller";
import { computed } from "@ember/object";

export default Controller.extend({
  filter: "",
  filterTodos: computed("arrangedContent", "filter", function() {
    var filter = this.get("filter");
    var rx = new RegExp(filter, "gi");
    var todos = this.model;
    return todos.filter(function(todo) {
      return todo.get("title").match(rx) || todo.get("body").match(rx);
    });
  }),
  sortedProperties: ["date:asc"],
  sortedTodos: computed.sort("model", "sortedProperties")
});

14:3 错误只允许字符串、数字、符号、布尔值、null、未定义和函数作为默认属性 ember/avoid-leaking-state-in-ember-objects

✖ 1 个问题(1 个错误,0 个警告)

【问题讨论】:

标签: ember.js ember-cli


【解决方案1】:

查看错误,你违反了 eslint 规则ember/avoid-leaking-state-in-ember-objects。通常,您可以在谷歌上搜索规则名称并找到规则的描述以及如何修复它。这是该规则的文档:https://github.com/ember-cli/eslint-plugin-ember/blob/master/docs/rules/avoid-leaking-state-in-ember-objects.md

正如您在该文档中所读到的,您不应该使用数组和对象作为默认属性。我会阅读那里链接的 Dockyard 博客文章,以了解为什么这是不好的做法。

在您的情况下,您使用数组作为sortedProperties 的值。根据上面链接的 eslint 规则文档,您通常可以通过在 init 上设置初始值来解决此问题。但是,排序属性是一种特殊情况 - 您可以通过查看computed.sort 的文档来查看建议的方法:https://api.emberjs.com/ember/3.4/classes/@ember%2Fobject%2Fcomputed/methods/sort?anchor=sort

如您所见,他们建议使用Object.freeze,这将防止属性被更改。所以这应该有效:

sortedProperties: Object.freeze(["date:asc"]),

【讨论】:

  • 请注意,如果使用带有 ember 的本机类,这不再是问题,因为它们提供了实例之间不共享的类字段。你可以在这里阅读更多关于 ember 中的原生类:blog.emberjs.com/2019/02/11/…
猜你喜欢
  • 1970-01-01
  • 2018-10-27
  • 2014-10-09
  • 2017-01-22
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多