-1

SPA의 다른 페이지로 이동할 때이 기능이 회귀 방식으로 작동하지 않습니다. 나는 언제나 업데이트에 대한 통보를 받고자하는 특정 페이지를 가지고있다. 그러나,이 관찰 가능한 hasUpdate은 다른 페이지에서 사용되는데, 일종의 전역 변수와 같습니다. 확장 및 가입은 페이지 변경시 사라지 나 직접 할 수 있습니까? 만약 내가 null 또는 뭔가 다른 페이지에 그것을 변경하여 자신을 어떻게 할 수 있을까요? 또한 내가 2 명 중 1 명을 구독하고 싶다면 구독자 나 다른 사람의 ID로 구독을 할 수 있습니까?다른 페이지에 대해 관찰 가능 상태로 확장 및 구독 중지

app.viewModel.members.hasUpdate.extend({ 
    notify: 'always' 
}); 

app.viewModel.members.hasUpdate.subscribe(function() { 
    viewModel.modificationCheck.update(); 
}); 
+0

당신이 "허용"으로 선택한 답을 좋아 했는가를 ? – user1596138

답변

0

구독의 dispose 방법은 당신이 찾고있는 것입니다. 녹아웃에는 "페이지"또는 "탐색"개념이 없으므로이 논리를 직접 처리해야합니다. 가장 간단한 경우는 다음과 같습니다.

hasUpdateSubscription = app.viewModel.members.hasUpdate.subscribe(function() { 
    viewModel.modificationCheck.update(); 
}); 

//When you change pages 

hasUpdateSubscription.dispose(); 

현실적으로는 좀 더 구조화 된 방식을 원할 것입니다. 개인적으로 각 페이지마다 KO ViewModel을 제안합니다. 뭔가 같은 :

다음
function PageOneViewModel() { 
    hasUpdateSubscription = app.viewModel.members.hasUpdate.subscribe(function() { 
     viewModel.modificationCheck.update(); 
    }); 

    this.dispose = function() { 
     hasUpdateSubscription.dispose(); 
    } 
} 

페이지가 루트 뷰 모델에 currentPage 관찰과 핸들이 될 수 있으므로 로직을 변경 페이지가 같은 것을 포함 할 것이다 :

var newPageVM = new PageTwoViewModel(); //create a view model for page 2 
var oldPageVM = app.currentPage(); 
app.currentPage(newPageVM); //set page 2 as the current VM 
oldPageVM.dispose(); //page VM dispose function should clean up subscriptions, etc. 
관련 문제