2012-07-28 3 views
0

기본적으로 내가하고 싶은 일은 내 HTML 테이블의 각 행에 대해 하나의 백본보기를 가지고 있으며 테이블을 렌더링 할 때 각 tr에 대한 backbone.view를 인스턴스화 할 때이 작업을 쉽게 수행 할 수 있습니다. 보기.하나의 eventlistener 만있는 백본 테이블 행보기?

그러나 이렇게하면 각 tr에 eventlistener가 생기게되어 매우 효율적이지 않습니다. 같은 일을 달성하는 방법이 있습니까 즉, 각 행 뷰의 "엘"은 tr하지만 모든 이벤트는 테이블 요소에서 위임되므로 하나의 eventlistener 만 존재합니까?

아마 테이블에 대한 부모보기가 있고 어떻게 든 모든 이벤트를 위임하거나 좋은 방법으로이 문제를 해결하는 방법을 모르겠습니다. 감사합니다.

+0

왜 각 행에 대한보기가 필요합니까? – Andbdrew

답변

3

정상적인 접근 방식은 TableView이고 복수는 RowView입니다. TableView는 Collection과 연결되며 필요에 따라 RowView을이 콜렉션을 반복하여 인스턴스화합니다.

또한 TableView는 Collection의 변경 사항을 수신하고 Collection이 변경되면 RowView 인스턴스를 만들고 제거합니다.

RowView는 컬렉션의 Model 각각에 대한 변경 사항을 수신합니다. 그리고 각 모델에 연결된 활성 DOM 요소를 통한 사용자 상호 작용에 대해 수신 대기.

이 문제는 발생하지 않습니다. 그리고 가장 직관적이고 유지 보수가 용이하며 우아한 구조라고 생각합니다.

당신이 정말 문제가되지 않습니다 한 번에 모든 행에 사건을 듣고있는 TableView를 가진 더 나은 생각한다면

,이 시도 :

var TableView = Backbone.View.extend({ 
    events: { 
    "click tr a.remove", "remove" 
    }, 

    remove: function(event){ 
    console.log("row-id", $(event.target).attr("data-row-id")); 
    } 
}); 

그냥 각 row 어떤으로의 TableView로 식별 할 수 있습니다 확인 예제에서는 data-row-id이라는 특수 속성을 사용하지만 컬렉션에 가서 구체적인 모델을 검색하고 실행해야합니다.이 이벤트를 RowView에서 직접 사용하면 모델에 직접 액세스 할 수 있고 모든 것이 더 자연스럽게 작동합니다.

실제로 나는 당신이 더 나은 성능을 얻지 못할 것이라고 생각합니다. 언더 후드 jQuery가 동일한 수의 이벤트 리스너를 생성 할 것이라고 생각합니다.

관련 문제