2014-10-15 9 views
4

Durandal 2.x 앱에서 사용자가 탐색 할 때마다 새 데이터를 가져와야하는보기가 있습니다. 이보기는 자식 라우터를 통해 제공됩니다 : 나는 그러나 overview.jsDurandal 2/자식 메서드에서 한 번만 호출되는 activate 메서드

define(function(){ 
    var vm = {}; 

    vm.activate = function(){ 
     // fetch data here 
    }; 

    return vm; 
}); 

activate 방법의 데이터 페치 로직을 배치 한

define(['plugins/router'], function(router) { 
    var vm = {}; 

    vm.router = router.createChildRouter() 
     .makeRelative({ 
      moduleId: 'viewmodels/cms', 
      fromParent: true 
     }).map([ 
      { route: ['inventory', ''], moduleId: 'inventory/overview', title: 'Inventory Management', nav: true } 
     ]).buildNavigationModel(); 

    return vm; 
}); 

, activate 단지 내가 그로 이동 처음이라고합니다 반면, 메인 라우터의보기에서는 매번 activate이 호출됩니다.

자식 라우터에서 cacheViews: false을 설정하려고했지만 아무 것도 변경하지 않았습니다. 사용자가보기를 탐색 할 때마다 호출 할

  1. 어떻게 적용 할 수 있습니다 activate :

    나는 또한 내 뷰 모델에 binding 방법이 주위에 너무 때마다 호출됩니다 실현?

  2. 항상 데이터 리프레시를 원할 때 로직을 가져 오는 데 더 좋은 방법이 있습니까?
  3. 또는 정품 인증 로직을 binding 방법에 적용 할 때 본질적으로 잘못된 것이 있습니까?
+0

보기 모델을 싱글 톤이 아닌 함수로 반환 해 보았습니까? – Brett

+0

메인 라우터의보기가 아닌 자식 경로의보기에 왜 그렇게해야합니까? 직관적 인 의미를 많이 가지지는 않습니다 ... –

+0

메인 라우터에서보기를 캐싱하고 있습니까? – Brett

답변

1

첨부 된 후크를 사용해야합니다. 뷰가 dom에 첨부 될 때마다 호출됩니다.

Durandal Docs에 관해서는 Hooking Lifecycle을 참조하십시오. 사용 가능한 후크와 그들이하는 일에 대한 아이디어를 제공해야합니다.

편집 : 죄송합니다. 아마 "should"가 조금시기 상조 였기 때문에 실제로 사용 사례에 달려 있습니다. 바인딩과 첨부는 모두 완료되면 의존하는 작업을 수행해야합니다. 바인딩은 DOM이 적용되고 연결되기 전에 연결됩니다. 따라서 모든 정보가로드 될 때까지 사용자가 흰색 페이지를 보게 할 것인지 또는 무엇인가를 보여주고 데이터 구동 부품을 첨부 된 해결의 약속으로 채우고 싶은지 여부에 따라 달라집니다. 정말 UI 결정입니다.

세 번째 질문의 경우 UI를 작성한 후에 데이터를 다시 가져 오는 경우가 발생할 수 있기 때문에 실제로 데이터를로드하는 것은 활성화 논리가 아닙니다. 따라서 데이터 계층의 측면이 더 많습니다. -> 비즈니스 로직이지만, 꽤 철학적 인 질문입니다. 제본 바인딩은 넉 아웃 바인딩이 시작되기 바로 전에 데이터를 가져 오는 것과 완전히 관련되어 있으므로 바인딩에 논리를 쓰거나 아무렇지 않은 사용자 경험이 필요한 경우 첨부해도 아무런 문제가 없습니다.

+1

'attached' 훅이'binding' 훅보다 나은 이유에 대해 자세히 설명해 주시겠습니까? 나는 문서에 익숙하지만 나는 내 질문에 답하지 못한다. –

+1

그리고 사실, 문서에서 수집 한 내용에서'attachedBooks'가 이미 호출 되었기 때문에'attached' 후크가 수명주기의 마지막 단계에서 데이터를 가져옵니다. –

+0

답장을 업데이트했습니다. 어쩌면 당신이 "사용해야"아마도 조금 성숙했다 – zewa666