2014-05-13 2 views
1

나는 Durandal을 Typescript와 함께 사용하고 있습니다.Durandal + Typescript : 모든 경로 활성화시 생성되는 Viewmodel

내 ViewModel 생성자가 해당 경로를 방문 할 때마다 호출됩니다. 이것은 낭비처럼 보인다. viewmodel의 상태를 다른 활성화 사이에서 유지해야하며 뷰 모델이 다시 필요할 때 해당 인스턴스의 activate() 만 호출해야합니까?

또한 사용자가 viewmodel을 떠났다하더라도 코드를 실행하는 일부 computedObservables가 있기 때문에 viewmodel은 여전히 ​​활성화되어 비활성화 후 메모리에서 실행됩니다.

viewmodel에서 여러 구성을 피하는 방법 - 또는 - 비활성화 후 뷰 모델을 올바르게 처리하려면 어떻게해야합니까?

+0

viewmodel이 자체 또는 생성자의 인스턴스를 반환합니까? –

+1

class vm {...}; 수출 = VM; – Anders

답변

0

클래스를 내 보내면 Durandal은 기본적으로 새로운 활성화가있을 때마다 새 클래스를 생성합니다. 이는 페이지의 각 뷰에서 "처음부터 새로 시작"할 수 있기 때문에 목적에 부합합니다. (RESTful 모델을 생각하면 새로운 URL로 이동하면 일반적으로 "신선한"상태를 나타낼 수 있습니다.)

계산 된 값을 deactivate()에 저장하면 계산 된 문제를 해결할 수 있습니다. 함수를 호출합니다. (Durandal lifecycle events) Knockout 3.2의 새로운 pureComputed을 사용할 수도 있습니다. 당신은 여전히 ​​싱글 뷰 모델을 사용하는 것을 선호하는 경우

, 당신은 당신의 타이프 스크립트 파일에서 싱글을 내보낼 수 있습니다

// Move this to a new file to simplify TS export restriction problems 
export class MyVm { ... } 

// In the module that durandal imports for its viewmodel 
import myvmmodule = require('myvmmodule'); 
var vm = new myvmmodule.MyVm(); 
export = vm; 
0

같은 파일에 할 수도 있습니다 설정 인터페이스를 대신 클래스를 유지하고 싶었다면 TS 내보내기 제한을 처리하는 방법

// create interface in a new file 
export interface IMyVM {...} 

// Keep all this code in one file 
import i = require('iMyVMModule'); 
class MyVm: i.IMyVM { ... } 
var vm = new myvmmodule.MyVm(); 
export = vm;