2014-04-14 2 views
4

우리가 개발중인 응용 프로그램에는 모든 ItemView에 항목 - 세부 정보 페이지에 대한 링크가 포함 된 CollectionView가 있습니다. 또한 항목을 CollectionView에서 선택하여 대량 작업을 수행 할 수 있기 때문에 모든 ItemView에 체크 박스가 포함되어 있습니다.마리오네트 뷰를 캐시하는 모범 사례

ItemDetails보기로 전환 할 때 은 다시 그리지 않고 (받은 편지함에서 메일 및 뒷면으로 전환 할 때 Gmail과 비슷하게) CollectionView의 상태를 유지하려고합니다. 우리의 해결책은 에 두 개의 서로 다른 영역에서 두 개의 뷰를 렌더링하고 하나에서 다른 것으로 전환 할 때 하나를 감추는 것입니다.. 이 솔루션에 대한

내 혼란은

  • 마리오네트 사용 이런 종류의 의미하지 않는 것이다.
  • 모든 DOM 요소가 삭제되지 않으므로이 아닙니다.

이 목표를 달성하기위한 더 좋은 해결책이 있습니까? 어딘가에 상태를 저장하고 CollectionView를 닫은 다음 나중에 다시 그릴 수있는 또 다른 해결책이 있지만 계산 오버 헤드가 심합니다. (우리는 뷰를 다시 그리는 것에 대해 상당히 무서워한다).

+0

실제로 많은 데이터를 검색하고 매우 복잡한 렌더링 .. 개인적으로 난 그냥 초점이없는 특정 지역을 숨길 수 있다고이 유사한 응용 프로그램을 만들었습니다. 나는 당신이 꼭두각시 라우터와 컨트롤러를 사용하고 있다고 가정하고 거기에있는 디스플레이 로직을 바꾼다. –

답변

0

컬렉션이 매우 큰 경우가 아니면 itemDetail 뷰에서 다시 전환 할 때 collectionView를 다시 렌더링하는 데는 문제가 없습니다. 체크 박스의 상태를 실제로 저장해야합니다.

그러나 나는 다른 접근법에 어떤 것이 잘못되었는지를 보지 못합니다. 아마 더 빠르며 한 지역을 숨기고 다른 지역을 보여주는 것만으로도 문제가 없습니다. 그게 효과가 있다면, 계속 해봐.

컬렉션 또는 itemDetail을보고있는 한 (특히 itemDetail 뷰가 크지 않은 경우) 뷰 중 하나를 닫으면 얻을 수있는 게 많지 않습니다. 해당 섹션을 벗어나면 (컬렉션 또는 itemDetail 뷰를 더 이상 보지 않음)이 두 영역이 포함 된 레이아웃을 닫을 수 있습니다. 그러면이 지역에서 사용하는 메모리가 모두 확보됩니다.

4

마리온은 이미 렌더링 된보기를 닫지 않고 영역에서보기를 표시 할 수 있습니다. 해당 지역의 show() 메소드에 {preventClose: true}을 전달하기 만하면됩니다. 컬렉션 뷰에 대한 참조를 유지해야하지만 나중에 다시 표시하거나 닫을 수 있습니다.

https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.region.md#showing-a-view

+0

좋은 찾기! 실제로이 옵션에 대한 유용한 사용 사례입니다. –

+2

'preventClose'가 ['preventDestroy'] (https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.region.md#preventdestroy)로 바뀌 었습니다. –