#ember.js #ember-cli
#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 В качестве свойств по умолчанию в ember / avoid-leaking-state-in-ember-objects разрешены только строка, число, символ, логическое значение, null, неопределенное значение и функция
✖ 1 проблема (1 ошибка, 0 предупреждений)
Комментарии:
1. Привет, Аббас, и добро пожаловать в Stack Overflow. Когда вы сталкиваетесь с подобными ошибками eslint, вы можете выполнить поиск в Google по названию ошибки, и вы найдете документацию, которая объясняет причины правил и способы их исправления. В вашем случае: github.com/ember-cli/eslint-plugin-ember/blob/master/docs/rules /… и github.com/ember-cli/eslint-plugin-ember/blob/master/docs/rules /… . Если у вас есть более конкретные вопросы о том, как решить в вашем случае, пожалуйста, укажите более подробную информацию в вашем вопросе
Ответ №1:
Просматривая ошибку, вы нарушаете правило 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/object/computed/methods/sort?anchor=sort
Как вы можете видеть, они предлагают использовать Object.freeze
, что предотвратит изменение свойства. Итак, это должно сработать:
sortedProperties: Object.freeze(["date:asc"]),
Комментарии:
1. Пожалуйста, обратите внимание, что это больше не проблема при использовании собственных классов с ember, поскольку они предоставляют поля класса, которые не являются общими для экземпляров. Вы могли бы прочитать больше о собственных классах в ember здесь: blog.emberjs.com/2019/02/11 /…