Как мне реализовать наблюдаемые в зависимости от шаблона правила, предоставленного объектом - PullRequest
0 голосов
/ 27 сентября 2019

Идея довольно проста: у меня есть определенные правила, поддерживаемые объектом JavaScript, например, так:

ruleExample = {
  key1: ['id1', 'id2', 'id3'],
  key2: ['id1', 'id4'],
  key3: ['id5', 'id6', id7']
}

и классом, представляющим объекты, которые должны иметь возможность наблюдать друг друга в зависимости от заданного набора правил, например, так

export class Item {
 private id: string;
 ... 

 constructor(id: string, private itemManager: ItemManager) {
   this.id = id;
   this.itemManager.register(this);
 }

 doSomething(){ ... }
}

и класс, представляющий диспетчер объектов из класса Item выше, например,

export class ItemManager {
  private rules = {}  // from above
  private ruleSubjects = {}  // this will hold different rxjs Subjects accessible by rules.key's, these rules can differ so we need to fill later

  consturctor() {
  // create our ruleSubjects Array holding rules by name as Subject
    for ( const key in this.rules) {
      if (!this.rules.hasOwnProperty(key)) { continue; }
      this.ruleSubjects[key] = new Subject<string>();
      this.ruleSubjects[key + '$'] = this.ruleSubjects[key].asObservable();
    }
  }

  // subscribe item based on the ruleset at the right observable (this is simplified!)
  register(item: Item) {
    if (item.id === 'id1') {
      this.ruleSubjects[key1 + '$'].subscribe( item.id => { item.doSomething(); }); // id1 appears in rule key1
      this.ruleSubjects[key2 + '$'].subscribe( item.id => { item.doSomething(); }); // and in key2
    }
  }
}

Пока все хорошо.Теперь, если item = new Item('id1'), itemManager должен подписать этот пункт на право наблюдателей.Не так ли?

Но я получаю эти ОШИБКИ:

TS1005: ',' expected.
this.ruleSubjects.[key1 + '$'].subscribe( item.id => { item.doSomething(); }); 
                                                  ^^       ^^            ^^

Что я делаю не так?Спасибо за помощь!

...