ES6 Классы, которые зависят друг от друга в статических переменных - PullRequest
0 голосов
/ 12 июня 2018

У меня есть два класса, для которых я хочу определить отношения.Я пытаюсь использовать статические переменные для достижения этой цели, однако ссылки на классы не определены.

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 Task -определяется, но не так, как я ожидал бы.Есть ли способ заставить это работать?

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Я не знаю, сможете ли вы сделать это изнутри класса (как бы вы ни определяли первое, вы не будете знать о втором, и для этого также, вероятно, потребуются статические конструкторы).Однако я смог заставить его работать со статическими методами, вызываемыми после определения самих классов:

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]
0 голосов
/ 12 июня 2018

Вы только что испытали круговую зависимость.Task потребности Checklist и Checklist потребности Task;интерпретатор не может справиться с этим.

Одним из решений было бы использование оператора get , который задержит разрешение классов 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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...