2013-04-08 2 views
1

보기에 표시하는 연락처 그룹 목록이 있습니다. 연락처 그룹을 클릭하면 현재 해시를 변경하고 연결된 연락처를로드하려고합니다. (DurandalJS -보기 모드를 새로 고치지 않고 탐색합니다.

기타 :

가족 (= 2 아이디) :

말, 난 3 개 연락처 그룹

모든

(ID 없음)

친구 (= 1 ID)를 가지고 Id : = 3)

친구를 클릭하면 url을 #/people/1이고 매개 변수 (Id = 1)로 콜백을 호출해야합니다. All을 클릭하면 모든 연락처를로드하기 위해 ID를 전달하지 않아야합니다 (#/people).

뭔가 같은 :

router.when("#/people/:id", function (routeData) { 
    console.log(routeData.Id); //Output: 1 

    // Load contacts by id 
}); 

router.when("#/people", function() { 
    // Load all contacts 
}); 

function onContactGroupClick(contactGroup) { 
    router.navigateToWithoutReset("#/people/" + contactGroup.Id); 
} 

이유는 내가 (변경 URL을 호출 코드를 통해 또는 손으로 이루어집니다 경우 문제가되지 않는 중앙 위치를 가지고, 또는를 클릭하고 싶다고한다 하이퍼 링크).

좋은 예 Gmail에서/연락처

내가 DurandalJS에서 router.navigateTo를 사용하는 경우

이며, 전체보기 모델이 다시로드됩니다. DurandalJS를 사용하여이 작업을 수행하는 방법이 있지만 뷰 모델을 새로 고치지 않아도됩니까?

답변

1

중심 위치는 무엇입니까? 내가 이해에서

은 당신이 찾고있는 것을 이것이다 : 그래서

define(["services/dataservice"], function (dataservice) { 
     var allContacts = ko.observableArray(); 
     var friendsContacts = ko.observableArray(); 
     var contacts = ko.observableArray(); 
     var loadedAllData= false; 
     var loadedFriends = false; 
     var vm = { 
      activate: activate, 
      contacts: contacts, 
     }; 
     return vm; 

     function activate(routeData) { 
      var id = parseInt(routeData.id); 
      if(id === 1) 
      { 
       if(loadedFriends) 
       { 
        //push friends observable into contacts 
       } 
       else 
       { 
        //load friends from server and set loadedFriends to true. 
       } 
      } 
      else 
      { 
       if(loadedAll) 
       { 
        //push all contacts this into the contacts array 
       } 
       else 
       { 
        //load from the webserver, and also filter friends and put them into friends observable. Here set both loadedAll and loadedFriends to true. 
       } 
      } 
     } 
    } 
); 

당신은 처음으로 당신이 URL이나 친구들을 찾고이 화면에 와서 다음 때 연락처와보기를 결합하는 경우 하이퍼 링크는 웹 서버에서 친구 데이터를로드해야하고, 같은 화면 친구 데이터에 대한 후속 컴백에서 여러 번로드되지 않습니다. Durandal은 동일한 VM을 사용하며 플래그 및 관측 가능 정보를 재설정하지 않습니다 (수동으로 브라우저 새로 고침 버튼을 누르거나 누르지 않는 한).

관련 문제