2014-04-04 2 views
0

편집 :액세스 요소 - Backbone.JS

해결

코드, 언급 한 바와 같이 하나의 시간에 대한 또 다른 비열한 하나, 많이 감사와 죄송의 두 오타! Backbone.js

을 탐험하면서

안녕하세요 SO는

나의 현재 문제가 발생했습니다 내가 백본을 사용하여 간단한 HTML 테이블을 만든

, 각 행은 모델에 전달되는 모든 행의 모음입니다 모든 것을 렌더링하는 견해 - 지금까지는 너무 좋아.

내 테이블에는 다음과 같은 클래스가 있습니다. 각 테이블 셀에는 .tablecell 클래스가 있고 각 행에는 .tablerow 클래스가 있습니다.

현재 테이블 셀을 클릭 할 때마다 올바르게 실행되는 클릭 이벤트가 있습니다. 알아두면 좋겠지 만 가능하면 '클릭 한'표 셀에 액세스하여 속성을 변경하는 방법이 있습니다. 간단한 예로, 클릭 한 셀의 클래스를 변경하거나 배경색을 변경하십시오.

할 수 있습니까? 아니면 완전히 빠진 것이 있습니까?

현재 나의 생각은 각 셀이 자기 자신의 견해와 자신의 사건으로 자신의 모델이어야한다는 것입니다.하지만 나는 그렇게 복잡해야한다고 생각하지 않습니다. 미리 감사드립니다.

내 하나의보기는 이것이다 :

  var rowView = Backbone.View.extend({ 

       //usual view attributes : el, model, initialize etc. 

       events : 
        { 
        "click.tablecell" : "clickOnCell", 
        }, 

        clickOnCell : function(cell) 
        { 
         cell = $(cell.currentTarget); 
         cell.css("font-weight","bold"); 
        }, 
       render : function() { 

     // boring render method, renders correctly. 

       }, 
      }); 
당신은 events 해시에 이벤트와 핸들러 (당신이 당신의 예에 blankspace 누락)에 추가해야합니다
+0

'이벤트'에 오타가 있습니다 (이벤트 이름과 선택자 사이에 공백이 있어야합니다). 구조는 다르게 작동합니다 : http://jsfiddle.net/ambiguous/vYntw/ 뭔가 빠졌습니까? –

+0

빠른 주석 주셔서 감사합니다; 약간 이상한 점이 있습니다. 1) 내 이벤트는 제안 된대로 공간과 함께 실행되지 않습니다 2) 클래스 이름 대신 선택기를 변경하면 원하는대로 이벤트가 올바르게 실행됩니다. . 3) JSfiddle 예제에서 TD에는 클래스가 없습니다. 아직도 나를 위해 불이 나지 않는 이유가 무엇인지, 왜 TD 선택기가 필요한지 궁금합니다. – Patrick

+0

템플릿에 넣기가 너무 어려웠 기 때문에 JavaScript에서 클래스를 ''에 추가했습니다. 상황에 맞게 바이올린을 업데이트하면 볼 수없는 코드에서 계속 진행될 수 있습니다. –

답변

0

:

events: { 'click .tablecell': 'clickOnCell' } 

당신은 jQuery를받을를 (또는 jQuery를 대체 할 다른 프레임 워크) 이벤트 객체 :

clickOnCell: function (e) { 

    var $td = $(e.currentTarget); 

    $td.css('color', 'red'); 

} 

의 끝에서 이벤트 위임이 발생 함을 이해합니다. 즉,보기에 행으로 el 속성이 있어야 함을 의미합니다.

뷰 정의 중에 el 속성을 설정할 수없는 경우 (해당되는 것처럼 보임) render 동안 테이블 행 요소에 setElement을 사용해보십시오.

render: function() { 

    //... 

    var myRow = $('<tr/>'); 

    this.setElement(myRow);   

    //... 

} 

희망이 있습니다.

+0

답변 해 주셔서 감사합니다. 오타가있는 것을 눈치 채기는했지만 처음에는 '올바르게'작성하면 이벤트가 실행되지 않기 때문에 쓴 이유가 있습니다. 'click'을 사용하거나 'click td'를 사용하면 이벤트가 발생하지 않지만 클래스를 사용하려고하면 해당 이벤트가 발생하지 않으므로 오타가 발생합니다. 어쨌든 특정 'click .classname'이 작동하지 않는 이유에 대해 생각해 보거나 아이디어를 듣는 것이 좋습니다. Google은 나를 위해 마른 것입니다 – Patrick

+0

이벤트 위임은 뷰 인스턴스 생성의 끝에서 발생합니다. 테이블에 "엘"속성을 설정 했습니까? 그것으로, 나는 의미한다 : 당신이보기를 할 때 당신은 어떤 엘 값을 얻습니까? 그것은 당신의 식탁이어야합니다. "el"을 설정할 수 없다면, 테이블 요소에'setElement'을 사용해보십시오. –

+0

답변을 업데이트했습니다. –