1

BackboneMarionette을 사용하여 모델/컬렉션을 파괴 할 때 가장 좋은 방법은 무엇입니까? 보기가 자동으로 Marionette (올바르게 사용 된 경우)로 관리되지만 모델/컬렉션은 어떻습니까? 언제 그들을 파괴합니까? 당신의보기가 아래 코드처럼 파괴 될 때입니까? (JavaScript 대신 TypeScript입니까?) 또는?백본 + 마리오네트 - 모델/컬렉션을위한 메모리 관리 모범 사례?

class SomeItemView extends Marionette.ItemView<Backbone.Model> { 
    destroy() { 
     super.destroy(); 
     delete this.model; // is this the best way to destroy a model/collection? 
    } 
} 
+0

모델이 참조 해제되지 않은 경우 (참조 카운트가 0 인 경우) 가비지 수집으로 표시됩니다. 왜 내 대답은 downvoted 모르겠지만, 마리오네트와 함께 일할 때, 내가 제공하는 대답은 꽤 일반적인 관행이며 어떤 메모리 누수가 없습니다. – Trace

+0

알았어, 됐어! 그런 다음 "부모보기"와 함께 가비지 수집해야합니까? – AfroMogli

+0

콜렉션 뷰 또는 compositeview를 사용하는 경우, 부모 뷰가 파기되면 하위 뷰가 파괴됩니다. – Trace

답변

1

모델/컬렉션을 명시 적으로 삭제하지 않아도됩니다. 대신, 교수형 참고를 남기지 않도록하십시오.

교수형 참조를 생성하는 가장 일반적인 방법은 전체 범위를 통해 모델에 액세스 할 수 있고 listener.listenTo(model 대신 model.on을 사용하여 이벤트 수신기를 바인딩 할 때입니다.

+0

그렇다면 내 모델 중 어느 것도 할당 해제/삭제되지 않은 것으로 보입니다. 그래서 각 listenTo는'stopListening' 또는? Chrome 용 백본 디버거 확장 프로그램을 사용하여이 내용을 볼 수 있습니다 (https://chrome.google.com/webstore/detail/backbone-debugger/bhljhndlimiafopmmhjlgfpnnchjjbhd). – AfroMogli

+0

아니요, 대부분의 경우 stopListening을 호출 할 필요가 없습니다.제 말은 모델에 대한 참조가있는 뷰는 뷰가 제거 될 때 해당 리스너가 정리되기 때문에 'listenTo'를 통해서만 이벤트 리스너를 첨부해야한다는 것입니다. 즉, 매달린 청취자/참조가 첨부되어 있지 않아도 필요할 때 모델을 자유롭게 정리할 수 있습니다. –

+0

Chrome 확장 프로그램에 대해 알지 못하므로 모델을 표시하는 이유/방식에 대해 실제로 추가 할 수 없습니다. 참조가 유지되는 확장이 가능할 수 있습니다. 또 다른 가능성은 당신이'Backbone.Relational'과 같은 라이브러리를 사용하고 있다는 것입니다. –

0

마리오네트 컨트롤러 및 지역을 조사하는 것이 유용 할 수 있습니다.

var region = new Marionette.Region({ el: "#container" }); 

를 사용하면 내부 뷰를 렌더링하는 데 사용할 수 있습니다 :

var some_itemview = new Some_Itemview(); 
region.show(some_itemview); 

당신이 모델과 뷰를 인스턴스화하는 마리오네트 컨트롤러를 사용하는 경우. 당신이보기를 정리할 때

var some_model = new Backbone.Model(); 
//Set some properties on the model; 
var some_itemview = new Some_Itemview({ model: some_model }); 
region.show(some_itemview); 

그런 다음, 당신은 단순히 호출 할 수 있습니다 : 당신은 또한 region.show(another_view);을 사용할 수 있습니다

region.close(); 

자동으로 이전 뷰를 정리하는 것이다.

보기 및 관련 모델은 모델 개체에 대한 유일한 참조뿐만 아니라 파괴되어야합니다.

+0

왜 downvote를 설명 할 수 있습니까? Marionette에서 영역을 닫으면 뷰에 바인딩 된 모델/컬렉션도 정리해야합니다. – Trace

+0

설명 주셔서 감사합니다. 왜 당신이 downvoted (나) 아니 었는지 모르겠다. 질문을해라 - 내가 왜 당신이 지역을 사용하고자하지만 왜 내가 마리오네트 컨트롤러를 사용해야 이해합니까? – AfroMogli

+0

마리오네트 컨트롤러는 여러 가지 이유로 사용할 수있는 범용 개체입니다. 예를 들어, 뷰를 인스턴스화하고, 이벤트 수집기와 관련된 이벤트를 관리하며, 초기화/삭제 기능을 사용하면 편리합니다. – Trace

관련 문제