사용자가 여러 번 수행 할 수있는 기능을 웹 페이지에 구축하고 있습니다. 사용자의 액션을 통해 ko.applyBindings ()를 사용하여 객체 / 모델을 생성하고 HTML에 적용합니다.
데이터 바인딩 된 HTML은 jQuery 템플릿을 통해 생성됩니다.
여태까지는 그런대로 잘됐다.
두 번째 개체 / 모델을 만들고 ko.applyBindings ()를 호출하여이 단계를 반복하면 두 가지 문제가 발생합니다.
- 마크 업은 이전 개체 / 모델과 새 개체 / 모델을 표시합니다.
- 객체 / 모델의 속성 중 하나와 관련하여 자바 스크립트 오류가 발생하지만 여전히 마크 업에 렌더링되어 있습니다.
이 문제를 해결하기 위해 첫 번째 패스 후 jQuery의 .empty ()를 호출하여 모든 데이터 바인딩 속성을 포함하는 템플릿 HTML을 제거하여 더 이상 DOM에 있지 않도록합니다. 사용자가 두 번째 패스를 위해 프로세스를 시작하면 데이터 바인딩 된 HTML이 DOM에 다시 추가됩니다.
그러나 내가 말했듯이 HTML이 DOM에 다시 추가되고 새 개체 / 모델에 다시 바인딩되면 첫 번째 개체 / 모델의 데이터가 여전히 포함되며 발생하지 않는 JS 오류가 계속 발생합니다. 첫 번째 패스 동안.
결론은 마크 업이 DOM에서 제거되었지만 Knockout이 이러한 바인딩 된 속성을 유지하고 있다는 것입니다.
그래서 제가 찾고있는 것은 Knockout에서 이러한 바인딩 된 속성을 제거하는 수단입니다. 더 이상 관찰 가능한 모델이 없다고 녹아웃에게 말하고 있습니다. 이를 수행하는 방법이 있습니까?
편집하다
기본 프로세스는 사용자가 파일을 업로드하는 것입니다. 그런 다음 서버는 JSON 개체로 응답하고 데이터 바인딩 된 HTML이 DOM에 추가 된 다음 JSON 개체 모델이 다음을 사용하여이 HTML에 바인딩됩니다.
mn.AccountCreationModel = new AccountViewModel(jsonData.Account);
ko.applyBindings(mn.AccountCreationModel);
사용자가 모델에서 일부를 선택하면 동일한 객체가 서버에 다시 게시되고 데이터 바인딩 된 HTML이 DOM에서 제거되고 다음 JS가 생성됩니다.
mn.AccountCreationModel = null;
사용자가이 작업을 한 번 더 원하면이 모든 단계가 반복됩니다.
jsFiddle 데모를 수행하기에는 코드가 너무 '관련'되어 있습니다.
init
적용 할 데이터를 전달 하는 함수를 노출하지 않는 이유는 무엇 입니까?