2013-04-28 2 views
1

백본 (Backbone) 달력 응용 프로그램을 만들고자합니다. 모델이 Event이고 EventView이고 DailyView입니다.보기 안의 HTML 요소에서 ID를 가져 오는 중 문제가 발생했습니다.

DailyView은 시간을 나타내는 셀 목록이 포함 된 표가 포함 된 템플릿을로드합니다 (예 : td #09). 셀을 클릭하여 id을 얻으려고하지만, 그럴 경우 실패합니다. 나는 대신에 el: divDailyView에서 참조하고 있다고 생각합니다.

DailyView = Backbone.View.extend({ 
    tagName: "div", 
    template: _.template($('#daily-view').html()), 

    events: { 
     'click td': 'onClick' 
    }, 
    initialize: function(){ 
     _.bindAll(this, 'render'); 
     this.model.bind('change', this.render, this); 
     this.render(); 
    }, 
    render: function(){ 
     $(this.el).html(this.template(this.model.toJSON())); 

     return this; 
    }, 
    onClick: function(){ 
     var hour= $(this.el).attr("id"); 
     //This doesn't work 
    } 

나는 (때때로 Event을 포함, 때로는 빈)의 서브 뷰와 같은 세포를 추가 생각했지만, 나는이 방법을 좋아하지 않는 내가이 DOM에 더 많은 elemtns를 추가하지 않으려는 것 그것이 꼭 필요한 경우는 예외입니다.

div 대신 td을 참조 할 수있는 방법이 있습니까? 이 게시물에서

+0

첫째, 태그 이름의 속성을 사용하면보기가 표현하고자하는 요소의 유형을 식별합니다. 따라서 'div'가 아닌 'td'가 필요할 것입니다. 둘째, 테이블에 테이블을 추가하려면 테이블에 테이블을 추가해야합니다. 즉, 테이블 마크 업에 직접 추가해야합니다. – kinakuta

+0

['this. $ el'] (http://backbonejs.org/#View-$el)이 이미있을 때는'$ (this.el) '할 필요가 없습니다. 그리고 어쨌든'this.model.bind()'호출에 세 번째 인자를 제공한다면'_.bindAll'에 대한 필요는 없습니다. –

+0

@kinakuta 아니오, 해당 부분에서 'div'가 올바른 것입니다. 'DailyView'는 테이블 (및 셀)을 포함하는 래퍼입니다. 'EventView'는 개별 요소를 나타냅니다. 문제는 표를 나타내는 것과 관련이 없습니다. @muistooshort 감사합니다. 당신 말이 맞습니다. 그것은 javascript (및 jQuery 및 Backbone)을 사용한 첫 번째 응용 프로그램이며 많은 개념을 명확히 할 필요가 있습니다. – AnimusNecandi

답변

2

: How to find the Id of model corresponding to clicked item?

onClick: function(e){ 
    var hour = e.currentTarget.id; 
    //This does work ? 
} 
+0

그럴 수 있습니다! 나는 내가 제대로 찾지 않았다고 생각해. 방금 계정을 만들었 기 때문에 나는 당신을 업 워드하는 데 충분한 명성을 얻지 못했지만, 당신은이 사이트에 참여하는 유틸리티의 유용성을 확신하게되었습니다. 대단히 감사합니다 : P – AnimusNecandi

+0

팁 주셔서 감사합니다, 답변을 수정;) –

관련 문제