2014-07-16 32 views
1

是我的問題Marionettejs事件問題

我ItemView控件婁

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」(有一個空格)時,它不是。

任何人都可以幫我理解爲什麼嗎?

+0

正如我所瞭解,您嘗試捕獲單擊根ItemView節點。只需使用{'click':'onClick'},這個doesen't工作,因爲查看委託事件查看$ el通過選擇器,因爲沒有.name在您的視圖事件doesent火災 - Bacbone視圖delegateEvents方法部分 - if(selector ===''){$ el.on(eventName,method); } else { this。$ el.on(eventName,selector,method); }。 – Evgeniy

+0

name.click可能作爲觸發器支持在木偶中的一部分,但我不確定 – Evgeniy

+0

事件名稱沒有與木偶或骨幹無關的空格,這些事件委託給jQuery,這是一條通用規則 - 或者事件或event.namespace - 從來沒有空間 –

回答

1

正如在評論中提到的,之所以

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

犯規的工作原理是,通過增加「名稱」你提供一個選擇的事件結合,但結合的範圍是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"); 
}); 

總之,你不需要的。名稱儘可能的事件是或您應該的。名稱類添加到內部元素作爲模板的一部分,那麼它會使用您在問題中提供的代碼。