检测在Backbone / Marionette中单击itemview容器

时间:2016-01-07 01:25:23

标签: backbone.js marionette

我有以下项目视图:

    var timeMachine=function(yearsLater,monthsLater,daysLater,hoursLater,minutesLater) {
        var dateObject=new Date();
        var newDate=new Date();
        newDate.setDate(dateObject.getDate()+daysLater);
        newDate.setMonth(dateObject.getMonth()+monthsLater);
        newDate.setYear(dateObject.getFullYear()+yearsLater);
        newDate.setHours(dateObject.getHours()+hoursLater);
        newDate.setMinutes(dateObject.getMinutes()+minutesLater);
        console.log(newDate);
    }
    timeMachine()

使用以下把手模板:

return Marionette.ItemView.extend({
        template:tpl,
        tagName: 'div',
        className: 'v_itv_record_type_item',
        events:{
            'click @ui.item':'itemClicked'
        },
        ui:{
            item:'.v_itv_record_type_item'
        },
        itemClicked:function(e){
            console.log('clicked');
        }
    });

如果单击其中一个项目视图,则不会注册click事件。我理解Backbone限制只访问DOM的视图片段,但显然这并没有扩展到包含div本身,即使包含div不包含任何模板,父视图或其他部分。

如果我们更改<div class="clicktarget"> Stuff Goes Here </div> 处的ui哈希值和点项,则会注册点击。但这给了我.clicktarget结构似乎没有理由。这是检测整个项目视图DOM元素的单击的唯一方法吗?

1 个答案:

答案 0 :(得分:6)

您可以通过省略选择器在视图元素上注册click事件:

events:{
  'click' :'itemClicked'
}

请注意,如果您在视图级别有一个事件处理程序,那么视图中的所有点击都会冒泡并触发它的处理程序,除非它已经停止(event.stopPropagation())在路上。这是预期的行为。