2014-02-08 2 views
1

프로토 타입을 통해 특정 html 요소에 런타임 뷰 모델에서 수정 된 바인딩 문제가 발생했습니다. 모델에 배열을 추가했지만 바인딩을 적용한 후에는 아무 일도 일어나지 않습니다. 잘 작동하는 observables가 추가되었지만 배열과 정확히 같은 문제가 있습니다. 조언을 click런타임에서 수정 된 바인딩 viewmodel

var ViewModel = function() { 
    var self = this; 
    this.selectedItems = [{FullName: 'Mike'}]         
}; 
var model = new ViewModel(); 
ko.applyBindings(model,document.getElementById('node')); 
ko.cleanNode(document.getElementById('node')); 
model.__proto__.items = [{FullName: 'Michael'}]; 
ko.applyBindings(model, document.getElementById('node')); 

들으 : 여기

코드와 jsfiddle입니다.

+0

귀하의 바이올린에 대해 ... $ .data.items 대신 $ data.selectedItems를 의미합니까? – veritasetratio

+0

$ data.items - __proto__를 통해 추가 한 배열 – vchyzhevskyi

+0

죄송합니다.하지만 질문은 무엇입니까? 정확히 묻는 것이 무엇입니까? 질문에있는 코드는 실제로 [repro] (http://sscce.org) 문제가 아닙니다. (두 번째 @ veritasetratio의 의견, 심지어 내가 기대했던 것)은 많은 의미가 있습니다. 편집하고 명확하게 해주시겠습니까? – Jeroen

답변

0

문제는 ko.cleanNode가 not working as you think it is입니다. 그것은 당신이 생각하기에 모든 바인딩을 제거하는 것이 아닙니다.

노드 div를 완전히 제거한 다음 복제하고 다시 추가하는 것이 좋습니다. 물론 jQuery를 사용하면 쉽게 사용할 수 있습니다. 그렇지 않으면 약간 백업하고 viewModel의 프로토 타입에 항목을 추가 한 다음 div에 다시 바인딩해야하는지 여부를 실제로 평가합니다. if 바인딩이 원하는 것을 수행하지 않을 것이라고 확신합니까?

또한이 코드를 녹아웃으로 테스트 해보십시오. 3 - 바인딩을 여러 번 적용하는 것에 대한 오류가 발생합니다.

+0

내 프로젝트에서 페이지 제목을 비롯한 모든 페이지와 머리에있는 다른 위치에 값을 바인딩하므로 내 HTML 노드를 제거 할 수 없으므로 노드 div를 완전히 제거 할 수 없습니다. – vchyzhevskyi

+0

@coirius - 바인딩을 통해 노드를 다시 생성 할 수 있습니다. 또한 주어진 노드를 제거한 다음 다시 추가하고 IT에 applybinding을 다시 호출 할 수 있습니다. 또는 applyBindingsToNode를 호출하고 루트 컨텍스트를 제공 할 수 있습니다. –

관련 문제