2014-04-19 9 views
1

Durandal 2.0.1을 사용하여 router.navigateBack 기능을 올바르게 작동 시키려고합니다.durandal 2.0 navigateBack()은 전체 페이지 새로 고침을 발생시킵니다.

나는 리드 (lead)라고 부르는 엔티티를 생성 할 수있는 뷰 모델을 가지고 있습니다. 새로운 리드를 작성한 후, 리드 경로를 작성하는 대신 편집 리드 경로를 가지며 또한 이력을 바꿀 수 있도록 URL을 대체하려고합니다. 나는 다음과 같은 기능이 후 저장 전화 : 여기

router.navigate('#lead/' + vm.lead().id(), { replace: true, trigger: false }); 

내가 전화 할 때 이후

{ 
    route: 'lead(/:leadId)', 
    moduleId: 'lead/lead' 
} 

그럼 내 설정 파일의 경로 설명입니다

router.navigateBack(); 

그것은 예상 경로로 이동하지만, 항상 전체 페이지를 새로 고칩니다. 나는 전체 페이지 새로 고침을 피하기 위해 노력하고 평소처럼 간단하게 탐색 할 수 있습니다.

는 durandal 1.0 난 그냥이 같은 작업을 수행하기 위해

router.replaceLocation(); 

전화를 사용하고 잘 작동합니다. 내가 여기서 뭔가를 놓치고 있는지 궁금 하네.

var leadId = vm.lead.peek().id.peek(); 
router.navigate('#lead/' + leadId, { replace: true, trigger: false }); 

내가 당신의 관찰 완전한 재 계산을 일으키는 의존성을 가지고 있다고 생각합니다 :

답변

1

은 다음보십시오. Knockout의 peek()을 사용하여 종속성을 만들지 않고도 값을 얻을 수 있습니다.

+0

도움 주셔서 감사합니다. 이것은 완벽하게 작동했습니다! 리드를 삭제하려고 할 때 비슷한 문제가 발생합니다. 삭제할 때 –

+0

에 동일한 유형의 메소드를 호출하지만 {replace : true, trigger : true}를 사용하여 삭제 후 내역을 탐색하고 바꿉니다. 이후에 router.navigateBack() 메서드를 호출 할 때 페이지 새로 고침과 동일한 문제가 발생합니다. observables에 대한 참조를 peek 참조로 바꿨지 만 trigger가 true 일 때 문제를 해결하지 못했습니다. 나는 경로를 바꾸지 않고 삭제 된 레코드로 이동하려고 할 때 canActivate 메소드의 탐색을 취소함으로써이 문제를 해결했습니다. 그러나 이것이 나에게 큰 문제는 아니지만, 내가 어디서 잘못되었는지 다시 알면 입력. –

+0

와우 .. 그냥 내 문제가 해결되지 않았다는 것을 깨달았습니다 ... 또한이 문제는 Google 크롬 브라우저에만 해당된다는 것을 깨달았습니다. router.navigateBack()을 호출하고 router.navigate ('# ...', {replace : true})를 사용하여 설정된 경로에서 naviagte를 시도 할 때마다 전체 페이지를 새로 고칩니다. –