2013-04-23 4 views
2

다음과 같은 시나리오가 있습니다 : - 많은 수의 응용 프로그램이 있습니다. (1mil +) - 목록 1에있는 각 항목에 관찰 가능.구독 취소시 관찰 내용 삭제

응용 프로그램 초기화에서 관찰 가능 항목을 만들면 많은 처리와 메모리가 필요하므로 응용 프로그램이 고정됩니다. 한 번에 한 항목 씩 파트가 렌더링되므로 필요에 따라 솔루션을 만드는 것이 해결책입니다. 이것은 상당히 쉽습니다.

필요한 것은 항목을 바인딩 해제 한 후 새 배치를 표시하고 생성 된 관찰 가능 항목을 삭제하고 더 이상 사용하지 않는 것입니다.

한 가지 해결책은 새로운 배치로 전환 할 때 이전 배치를 반복하고 파괴하는 것입니다. 이것은 또한하기 쉽지만 불행히도 충분하지 않습니다.

내 응용 프로그램은 구성 요소로 분할되며, 각 응용 프로그램은 주 항목 풀의 항목을 사용하거나 사용하지 않을 수 있습니다. 즉, 이전 항목을 검색하여 바인딩 해제하고 관찰 대상을 삭제할 수는 없지만 모든 구성 요소를 검색해야합니다. 그것은 성능 관점에서 좋지 않으며 구성 요소가 서로를 알아야 할 필요가 없기 때문에 좋지 않습니다.

내 질문은. 관찰자를 없애기 위해 녹아웃에 어떤 방법 (내장형이든 아니든)이 있습니까? 더 이상 구독자가 없으면 없습니까?

감사합니다.

+0

다른 관찰 가능 항목에 대한 새로운 참조를 생성하기 때문에'ko.computed'는 수동으로 처리해야하지만 더 이상 참조가 없으면 일반 관찰 가능 항목은 JS에 의해 가비지 수집되어야합니다. 그게 내가 잘못한거야? –

+0

아닙니다. ko.computed는 disposeWhen과 disposeWhenNodeIsRemoved 옵션을 가지고 있습니다. Observables는 기본적으로 모델에 첨부되어 있으므로 특별히 삭제하지 않으면 수집되지 않습니다. 그러나 문제는 disposeWhenNodeIsRemoved와 같은 observables를 처리해야 할 때를 알 필요가 있다는 것입니다. 그러나 비슷하거나 콜백을 찾지 못했습니다. –

+0

"주문형 생성 논리"는 단일 위치 또는 각 구성 요소에 있습니까? 논리를 단일 위치에 배치 할 수 있다면 이전 위치를 추적하고 바인딩을 해제 할 수 없습니까? –

답변

0

이 인스턴스에서는 Delete operator이 작동하지 않습니까? 개체의 특정 속성을 삭제하는 것이 원하는 작업이면 delete 연산자를 사용하여 트릭을 수행해야합니다.

var viewModel = { name: ko.observable("me"),` age: "a lot" }; 

이 당신이 녹아웃 뷰 모델 객체 내에서 하나의 속성을 대상으로 지정할 가정한다

$('element').on('event', function() { delete viewModel.prop; }); 

당신은 (그렇지 않으면 이벤트 또는 통해) 속성을 제거 할 준비가되면.

+0

삭제는 "삭제 방법"으로 작동합니다. 문제는 삭제해야 할 항목을 추적하는 것입니다. 초기 문제는 녹아웃으로 인해 코드를 추적하고 코드를 직접 작성하지 않을 가능성이있는 경우였습니다. –

+0

@DumitrescuBogdan 나는 이것이 당신이 찾고있는 것이라고 생각합니다. [link] (http://www.knockmeout.net/2012/05/using-ko-native-pubsub.html) –