2013-03-20 4 views
1

Dev 도구에서 ToDo 응용 프로그램을 보면 새 ToDo (모델)가 생성 될 때마다 AppView 내에 새로운 ToDoView가 만들어집니다. 그러나 나는 ToViews의 "콜렉션"을 보지 못했다. 나는 모델이 파괴되었을 때 뷰가 파괴되었다고 생각하지만 참조를 찾을 수 없기 때문에 이것을 묻습니다. 감사합니다.백본보기가 영구적입니까

답변

0

뷰는 일반적으로 DOM 내부와 같은 메모리 구조로되어 있으므로 자바 스크립트 코드가 해당 참조를 보유하고 있으므로 (브라우저의 JS 엔진에서 가비지 수집을 수행 할 수 없게 됨) 뷰가 계속됩니다. 있다. 창을 닫으면 사라졌어. 전체 페이지로드를 수행하는 다른 페이지로 연결되는 링크를 클릭하면 사라집니다.

그러나보기가 파괴되는 모델에 자동으로 응답하지 않습니다. 모델이 백본을 통해 삭제 될 때 모델을 DOM에서 사라지게하려면 this.listenTo(this.model, 'destroy', this.remove.bind(this)) 또는 그 라인을 따라 무언가를 수동으로 연결해야합니다.

또한 각 모델에 대해 새로운보기를 만들고 렌더링 한 다음 참조를 유지하지 않도록 렌더링 할 모델 모음이있는 경우는 일반적입니다. 컬렉션이 변경되면 가장 바깥 쪽 요소가 비게되고 새 뷰 인스턴스가 만들어지고 렌더링되므로 이전 뷰 인스턴스는 자동 가비지 수집에 적합합니다. 그래서 자바 스크립트는 오래된 뷰를 정리할 수는 있지만 해당 모델에 영향을주지 않으며 AJAX 요청을 트리거하지도 않습니다.

+0

여전히 혼란 스럽습니다. 모델 데이터가 변경되면 뷰를 업데이트해야합니다. 실제로 더 이상 존재하지 않는다면 어떻게 업데이트됩니까? 모델은 여기에서 반복 할 수있는 유일한 실제 개체 인 것 같습니다. – mike628

+0

보기가 여전히 "정말로 있습니다". 이벤트를 올바르게 연결 한 경우 모델의 데이터가 변경되면 해당 모델의보기가 해당 이벤트에 응답하고 이에 따라 DOM 요소가 업데이트됩니다. 한 번만, 뷰에는 모델에 대한 참조가 있으며 일반적으로 모델 목록을 유지하면 이벤트 바인딩이 뷰를 수행하고 뷰가 자동으로 업데이트되기 때문에 일반적으로 뷰 목록을 유지할 이유가 없습니다. 원하는 경우보기에 대한 참조를 유지할 수 있습니다. 때로는 필요하지만 종종 할 필요는 없습니다. 어쩌면 다른 사람이 더 잘 설명 할 수 있습니다. –

관련 문제