durandal 및 requirejs를 사용하여 내 viewmodels을 구성하고 있습니다. 나는 또한보기에서 멀리 이동할 때마다 컴포지션 수명주기 콜백 메서드 deactivate
에 연결하려고합니다. 이 방법으로 내 viewmodel을 처리하고 싶습니다.비활성화 후 Durandal에서 뷰 모델을 처리하는 방법
delete this
, this = undefined
시도했지만 작동하지 않는 것 같습니다.
나는 또한이 같은 durandal 이벤트 애그리 게이터 (aggregator)를 사용하고 있습니다 :
self.activate =() => {
App.trigger("testEvent");
};
App.on("testEvent").then(() =>
{
alert('Event Triggered!');
});
그래서 뷰 모델이로드 될 때마다 이벤트가 트리거됩니다. 이제 뷰에서 멀리 탐색 한 다음 다시 탐색하면 (뷰 모델이 다시로드 됨) 이벤트가 두 번 트리거됩니다. 세 번째 시각에 대한보기로 이동하면 이벤트가 세 번 반복되는 식으로 진행됩니다. 따라서 이전 뷰 모델이 여전히 존재하므로 durandal 이벤트가 각 뷰 모델에 의해 트리거되는 이유입니다. 따라서이 문제를 해결하려면 뷰 모델을 비활성화해야합니다. 어떻게해야합니까?
참고. 문제의 뷰 모델은 싱글 톤이 아니라 일시적입니다.
수신 거부가 트릭을 수행 한 것으로 보입니다. 내 이벤트가 더 이상 여러 번 호출되지 않습니다. 내 뷰 모델이 폐기되었는지 실제로 확인하는 방법이 있습니까, 아니면 신경 쓰지 않으시겠습니까? – Viqas
수백 개의 뷰 모델을 인스턴스화하지 않으면 노력할 가치가 없지만 Chrome 개발자 도구를 사용하여 자바 스크립트 개체 수 및 메모리 할당을 모니터링하여 가비지 수집기가 개체를 성공적으로 정리하고 있는지 확인할 수 있습니다. –