从视图中的HTML元素获取id的问题

从视图中的HTML元素获取id的问题

问题描述:

我正在尝试做一个Backbone日历应用程序。我有一个模型Event,EventViewDailyView从视图中的HTML元素获取id的问题

DailyView加载一个模板,其中包含一个表格,其中包含表示小时的单元格列表(例如:td #09)。我想单击单元格并获得它的id,但是当我这样做时,我失败了。我想我引用DailyView中的el: div而不是td

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),但我不喜欢这种方式,我不希望更多的elemtns添加到DOM除非这是绝对必要的。

有没有办法可以参考td而不是div

+0

首先,TagName属性标识要你的观点代表元素的类型。所以你需要它是'td',而不是'div'。其次,为了让您的td成为表格的一部分,您必须自己将其添加到表格中。这意味着你需要将它添加到表格标记中。 – kinakuta 2013-04-28 20:58:07

+0

当你已经拥有['this。$ el'](http://backbonejs.org/#View-$el)时,不需要'$(this.el)'。无论如何,如果你打算为'this.model.bind()'调用提供第三个参数,那么就不需要'_.bindAll'。 – 2013-04-28 21:24:56

+0

@kinakuta不,在这种情况下'div'是正确的。 'DailyView'是包含表格(和单元格)的包装器。 'EventView'代表单个元素。问题与代表表格无关。 @ muistooshort谢谢,你是对的。这是我第一次使用javascript(以及jQuery和Backbone)的应用程序,我需要澄清许多概念。 – AnimusNecandi 2013-04-29 07:40:10

从这个帖子: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 2013-04-28 21:06:04

+0

感谢您的提示,编辑了答案;) – 2013-04-28 21:54:59