Ошибка ember / avo-leaking-state-in-ember-objects для свойства сортировки - PullRequest
0 голосов
/ 30 марта 2019
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, undefined и функция допускаются в качестве свойств по умолчанию ember / избежать-leaking-state-in-ember-objects

problem 1 проблема (1 ошибка, 0 предупреждений)

1 Ответ

2 голосов
/ 30 марта 2019

Глядя на ошибку, вы нарушаете правило 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"]),

...