ember/avoid-leaking-state-in-ember-objects 排序错误 属性

ember/avoid-leaking-state-in-ember-objects error for sorting property

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 error 只允许字符串、数字、符号、布尔值、null、undefined 和函数作为默认属性ember/avoid-leaking-state-in-ember-objects

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

看报错,你违反了eslint规则ember/avoid-leaking-state-in-ember-objects。通常,您可以 google 搜索规则名称并找到规则的描述以及如何修复它。这是该规则的文档: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"]),