Люди,
У меня есть ViewModel, которая вставляет синглтон в его конструктор.
Затем в конструкторе я создаю наблюдателя для свойства в экземпляре синглтона.
В функции detached () я располагаю подпиской обозревателя.
constructor( singleton: MySingleton, bindingEngine: BindingEngine )
{
this.observer = bindingEngine
.propertyObserver( singleton, 'state' )
.subscribe( ( newValue, oldValue ) => this.onStateChanged( newValue, oldValue ) ) ;
}
// Sample updated with offending code
detatched()
{
// was calling it incorrectly like this - thought TypeScript would have flagged the problem
// this.observer.dispose ;
// and it should have been like this
this.observer.dispose() ;
// and setting observer to undefined is probably the safest
this.observer = undefined ;
}
Что происходит, так это то, что каждый раз, когда я перехожу на страницу, создается новый экземпляр ViewModel, и когда я покидаю страницу, вызывается detatched. (что я ожидаю, что произойдет).
Однако наблюдатель не удаляется / не удаляется, и экземпляр ViewModel остается в памяти. Когда значение 'state' изменяется и вызывается onStateChanged, это происходит для всех созданных экземпляров страницы. то есть, сколько раз я переходил на страницу или от нее.
Все это очень очевидно, когда в журнал записываются операторы отладки.
Должен ли Obsever.dispose () не удалять наблюдателя?
Разве мой экземпляр ViewModel также нельзя утилизировать?
Спасибо
Донал