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"]),
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"]),