2012-08-06 6 views
0

뷰에 바인드 된 javascript 객체 (viewModel)가 있습니다. 서버에서 새로운 버전의 newViewModel을 얻고 있습니다. (이 시점에서 주식 시장 가격 응용 프로그램을 상상할 수 있습니다.)knockout.js에서 깊이있는 구조의 자바 스크립트 객체 하나를 업데이트하십시오.

이전 viewModel의 참조가 느슨하기 때문에 newViewModel을 바인딩하지 않겠습니다.

그래서 서버 응답에서 기존 자바 스크립트 개체의 모든 속성을 업데이트해야합니다!

이것은 아마도 자바 스크립트 질문이지만 내 viewModel에는 많은 관찰 가능한 속성과 하위 속성이 있습니다. (녹아웃의 관측 가능)

Ps : jQuery의 $ .extend가 작동하지 않습니다. 업데이트]

은 (는 좋아 보인다) :

ko.mapping.fromJS (newViewModel, 뷰 모델); "Vs.Net Intellisense"에 과부하가 표시되지 않았기 때문에 인식 할 수 없었습니다.

내 개체가 매우 깊이 구조화되어 있습니다. 문제가 생기면 알려 드리겠습니다.

업데이트] (작동하지 않습니다) :

viewModel.x [] 길이 = 2

newViewModel.x [] 길이 = 위의 코드는 모두 새 X를 대체 12

. (viewModel.x [0], viewModel.x [1] 참조를 잃어 버렸습니다!) !!

그래서 내 HTML이 내 개체와 동기화되지 않습니다. 오른쪽 바구니에있는 viewModel.x [0]
은 왼쪽 바구니에 없습니다 (화면)

+1

나는 "매핑"플러그인이 당신이 찾고있는 것이라고 생각합니다 : knockoutjs.com/documentation/plugins-mapping.html – Niko

답변

0

거기에는 마법 같은 방법이 없습니다. 이전 배열 요소와 일치해야하기 때문에 뉴스와. "코드"는 배열 요소의 "키"를 알아야합니다 .. oldArray에 newElement를 추가 할 수 없다면 oldElement의 속성을 업데이트 할 수 있다면 newElement를 찾을 수 있다면 모든 배열 요소를 방문합니다.

고통 스럽지만해야만했습니다.