我有两个我想要定义关系的类。我试图使用静态变量来实现这一点,但是没有定义对类的引用。
import BaseQuery from "../../src/BaseQuery";
import Checklist from "./Checklist";
export default class Task extends BaseQuery {
static belongsTo = [Checklist];
}
import BaseQuery from "../../src/BaseQuery";
import Task from "./Task";
export default class Checklist extends BaseQuery {
static hasMany = [Task];
}
在Task类中,checklist是未定义的,并且在Checklist类中定义了Task,但没有像我期望的那样。反正有没有让它发挥作用?
答案 0 :(得分:2)
你刚刚经历了循环依赖。 Task
需要Checklist
和Checklist
需要Task
;解释者无法处理。
其中一个解决方案是使用get operator,这会延迟Checklist
和Task
类的解析并修复循环依赖问题。
Checklist
/ Task
时,解释程序必须解析 belongsTo
和hasMany
。
工作示例:
class Task {
static get belongsTo() {
return [Checklist];
}
static get name() {
return 'Task-class';
}
}
class Checklist {
static get hasMany() {
return [Task];
}
static get name() {
return 'Checklist-task';
}
}
console.log(Checklist.hasMany.map(x => x.name));
console.log(Task.belongsTo.map(x => x.name));

答案 1 :(得分:0)
我不知道你是否可以从类中做到这一点(因为你先定义的第一个不知道第二个,它也可能需要静态构造函数)。但是,我能够使用在定义类本身之后调用的静态方法:
class Rubyish{
static appendProp(propName, value){
if (!this[propName]) {
this[propName] = []
}
this[propName].push(value)
}
static belongsTo(cls){
this.appendProp('belongsToClasses', cls)
}
static hasMany(cls){
this.appendProp('hasManyClasses', cls)
}
}
class Task extends Rubyish{
}
class Checklist extends Rubyish{
}
Task.belongsTo(Checklist)
Checklist.hasMany(Task)
编辑添加:这可能过度,因为您可以在没有静态方法的情况下执行此操作:
class NewTask{}
class NewCheckList{}
NewTask.belongsTo = [NewCheckList]
NewCheckList.hasMany = [NewTask]