2011-12-12 1 views
2

백본에 컬렉션이 있습니다 ... 초기화 방법에서이 작업을 수행하고 있습니다 .... 컬렉션에 항목이 추가되면보기를 다시 렌더링하고 싶습니다.Backbone.js 컬렉션의 추가 처리기에서 뷰에 대한 메서드를 호출해도 괜찮습니까?

initialize: function (models, options) { 

     this.bind('add', function() { 
      NS.discussionView.reRender(); 
     }); 
    } 

이 솔루션은 완벽하게 작동하지만 mycoworker는 백본의 의도와는 완전히 반대한다고 말합니다. 이 작업을 수행하는 더 좋은 방법이 있습니까? 아니면이 방법이 좋습니까? 질문은 조금 주관적입니다. 정말로 제가 어떻게 이런 일을 정확하게해야하는지 알고 싶습니다. 의견이나 조언을 주셔서 감사합니다.

대답에 응답 ... 개체 모델이 더 깊습니다. discussionView에는 topicModel이 있습니다.이 모델에는 topic 모델의 백본 컬렉션 인 topics 속성이 있습니다. 각 주제에는 응답 모델의 응답 콜렉션이 있습니다. 답변이 주제에 추가되면 토론보기를 다시 렌더링해야합니다. 체인을 올바르게 설정하려면 어떻게해야합니까?

답변

3

단순히 의존성을 뒤집습니다.보기는 모델에 따라 다르지만 그 반대의 경우는 아닙니다. 이 방법으로 단일 모델을 여러 뷰 (단순, 상세 등)에서 사용할 수 있으며 모델을 수정하지 않고 뷰를 추가 할 수 있습니다.

model.bind('add', function() { 
    this.render(); 
}); 

또한 render()의 Backbone.js 명명 규칙을 따르는 것이 좋습니다.

+0

개체 모델이 더 깊습니다. discussionView에는 topicModel이 있습니다.이 모델에는 topic 모델의 백본 컬렉션 인 topics 속성이 있습니다. 각 주제에는 응답 모델의 응답 콜렉션이 있습니다. 답변이 주제에 추가되면 토론보기를 다시 렌더링해야합니다. 체인을 올바르게 설정하려면 어떻게해야합니까? – Hcabnettek

+0

이것은 잘 풀렸다. 첫 번째 레벨 하위 뷰를 만들 때 각 인스턴스에 parentView 속성을 제공합니다. 나는 각 토픽 add 핸들러의 응답 콜렉션을 바인딩하고 this.parentView.render()를 호출한다. 매력처럼 작동합니다. 감사! – Hcabnettek