属性归类的灰烬/避免泄漏状态

时间:2019-03-30 12:56:46

标签: ember.js ember-cli

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个警告)

1 个答案:

答案 0 :(得分:2)

在查看错误时,您违反了拖延规则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上设置初始值来解决此问题。但是,sort属性是一种特殊情况-通过查看computed.sorthttps://api.emberjs.com/ember/3.4/classes/@ember%2Fobject%2Fcomputed/methods/sort?anchor=sort

的文档,您可以看到建议的方法

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

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