Идея довольно проста: у меня есть определенные правила, поддерживаемые объектом 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(); });
^^ ^^ ^^
Что я делаю не так?Спасибо за помощь!