2013-03-25 7 views
4

녹아웃에서 두 개의보기 모델을 설정 중입니다.한 페이지에 두 개의 녹아웃보기 모델 사용

$.getJSON("/api/administrators", function (data) {   
    var AccessViewModel = { 
     administrators: ko.observableArray(data) 
    }; 
    ko.applyBindings(AccessViewModel); 

}); 

$.getJSON("/api/roles", function (data) { 
    var RolesViewModel = { 
     definedRoles: ko.observableArray(data) 
    }; 
    ko.applyBindings(RolesViewModel); 

}); 

나는 definedRoles에서 아무것도를 당길보기에서 관리자의 정보를 얻을 수 있지만, 드릴 수 없습니다. 역할에 대해 .getJSON 함수 내부에 경고를 추가하면 데이터가 반환됩니다. 뭔가 RolesViewModel을 만드는 사이에 잘못된 것 같다 내가 그렇게처럼 호출 할 때 :

<ul data-bind="foreach: definedRoles"> 
    <li data-bind="text: name"></li> 
</ul> 

은 누군가가 올바른 방향으로 날 포인트?

답변

8

ko.applyBindings은 섹션 당 한 번만 호출 할 수 있습니다. 두 번째 매개 변수를 전달하지 않으면 섹션이 전체 페이지입니다. DIV과 같은 특정 섹션이있는 경우 두 번째 매개 변수로 전달해야합니다.

또는 두 목록의 속성으로 페이지에 대한 하나의보기 모델을 만들 수 있으며 페이지를이 단일보기 모델에 바인딩하면됩니다. 나는이 방법을 권장한다. 그 코드는 다음과 같습니다 ko.applyBindings 한 번만 호출 할 필요가 있기 때문에

var ViewModel = function() { 
    this.administrators = ko.observableArray([]); 
    this.definedRoles = ko.observableArray([]); 
}; 

var vm = new ViewModel(); 
ko.applyBindings(vm); 

$.getJSON("/api/administrators", function (data) { 
    vm.administratos(data); 
}); 

$.getJSON("/api/roles", function (data) { 
    vm.definedRoles(data); 
}); 

당신은 가능한 한 빨리 그것을해야, 기억하십시오. Ajax 메서드에서 호출하는 것은 일반적으로 몇 가지 이유로 나쁜 생각입니다. 하나는 ajax 메소드가 더 이상 갱신 호출로 재사용 할 수 없다는 것입니다. 두 번째, 다른 페이지 기능은 ajax 메소드가 작동하기 시작할 때까지 기다려야합니다.

+0

이 시나리오에서 관리자를위한 동작은 어디에 있습니까? – rross

+1

@rross 무슨 행동? – Tyrsius

7

Tyrsius 대답은 정확하지만 나중에 참조 할 수 있도록 두 개의 다른보기 모델을 동일한 페이지에 바인딩 할 수 있습니다. 당신은

ko.applyBindings(wallView,$("#WallKo")[0]); 

같은 모델을 결합하여 선택된 ID로 사업부와 HTML을 포장 할 것이다 당신이 각 페이지에 원하는대로 그럼 당신은 많은 뷰 모델을 가질 수

<div id = "WallKo"> 
    <div data-bind="foreach:posts"> 
     ..... 
    </div> 
</div> 

을 즉.

+0

첫 번째 단락에서 이렇게 말합니다 ... – Tyrsius

+0

죄송합니다. 오 잘. .. 당신의 처형을 더욱 발전시킨다. – Darussian

0

HOW를 사용하여 모델을 특정 div에 바인딩하는 예를 보내 주셔서 감사합니다. 매우 도움이 됨