Marionettejs活动问题

时间:2014-07-16 12:04:24

标签: backbone.js marionette

我正在使用MarionetteJS v2.0.2,这是我的问题

我有itemView bellow

var Users = Marionette.ItemView.extend({
    template: 'user.html',
    tagName: 'li',
    attributes: {
        class: 'name'
    },
    initialize: function () {
        //console.log(this);
    },
    events: {
        "click.name": "onClick"
    },
    onClick: function () {
        console.log('click');
    }
});

所以当我在我的活动中写“click.name”时,事件被解雇了,但是当我写“click .name”(有一个空格)时,它不是。

任何人都可以帮我理解为什么吗?

1 个答案:

答案 0 :(得分:1)

正如评论中提到的,之所以

events: {
        "click .name": "onClick"
    },

不起作用是通过添加" .NAME"你正在为事件绑定提供一个选择器,但绑定的范围是视图本身的el(在你的情况下是li),因为你分配了" .name" li的类没有带有该类名的内部项,绑定也不起作用。

执行" click.name" (没有空格)就像在做"点击"只为你提供绑定的命名空间,就jQuery而言这是有效的 - http://api.jquery.com/on/#event-names

你可以看到这是如何工作没有主干。例如,采取以下绑定:

//this will work because were listening for click on our li
$("li").on("click", function(){
  console.log("im the jquery handler");
});

 //this will work because were doing the same as before only adding a namespace for our event 
$("li").on("click.name", function(){
  console.log("im the jquery handler");
});

 //this will NOT work because were adding the .name selector and jquery wont find an element with this class in our li element 
$("li").on("click",".name", function(){
  console.log("im the jquery handler");
});

简而言之,就事件而言,您不需要.name,或者您应该将.name类作为模板的一部分添加到内部元素,然后它将使用您在问题中提供的代码。< / p>