2013-04-17 2 views
0

나는 DurandalJS를 사용하고 있습니다.JavaScript Durandal child viewmodel

welcome.html:  
<div> 
      <!--ko compose: {model:'viewmodels/mymodule', activate: true}--> 
      <!--/ko--> 
</div> 

activate 기능이 예상대로보기 welcome.html가 활성화 될 때마다 mymodule에서 호출됩니다 내보기 welcome.html은 아이 뷰 mymodule 있습니다. 그러나 welcome.html이 비활성화되면 (다른보기로 이동하면) canDeactivatedevativate 함수는 mymodule.js에서 호출되지 않습니다.

어떻게이 문제를 해결할 수 있습니까?

답변

2

구성 바인딩에서 activate : true를 사용하면 뷰 모델의 전체 수명주기가 관리되지 않으므로 활성화 방법 만 해당 접근 방식으로 호출됩니다. (당신이보고있는 것처럼).

모든 라이프 사이클 이벤트를 얻으려면 활성기를 사용하여 뷰 모델의 라이프 사이클을 관리해야합니다.

몇 가지 옵션이 있습니다. 자세한 내용은 문제에 대한 durandal 설명서를 참조하십시오. http://durandaljs.com/documentation/Hooking-Lifecycle-Callbacks/ 특히 해당 페이지의 "Activator Callbacks"섹션을보십시오.

기본적으로 라우터를 사용하여보기 모델을 활성화하거나 활성기를 직접 만들 수 있습니다.

+0

필자는'welcome.html'에서'ko compose'를 편집하여'welcome.js'의 'viewModel.activator (new mymodule())'를 반환하는 속성에 바인딩했습니다. 여전히'canDeactivate'와'deactivate' 함수는'mymodule'에서 호출되지 않습니다 : ( – user2290746

+1

좀 더 많은 코드를 게시 하시겠습니까? 그러면 그것을 고칠 수있는 방법을 알려 드릴까요? 특히 환영합니다. 다른보기로 이동하고 있습니까? –