2012-12-01 69 views
1

我無法觸發DOM元素上的單擊事件。backbone.js不會觸發DOM元素上的單擊事件

這是我的js文件:app.js.我很確定我錯過了什麼或在這裏做錯了,但我無法弄清楚在哪裏。

var App = Backbone.View.extend({ 

    el: $('body'), 

    initialize: function() { 
     _.bindAll(this, 'sayHello'); 
    }, 

    events: { 
     'click .link': 'sayHello' 
    }, 

    sayHello: function(e) { 
     alert('Hello!'); 
    } 

}); 

var app = new App(); 

這是我的HTML文件:index.htm。

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8" /> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
    <title></title> 

    <script type="text/javascript" src="assets/js/jquery-1.8.3.min.js"></script> 
    <script type="text/javascript" src="assets/js/underscore-min.js"></script> 
    <script type="text/javascript" src="assets/js/backbone-min.js"></script> 

    <script type="text/javascript" src="assets/js/app.js"></script> 

</head> 
<body> 

<a href="#" class="link">Click here!</a> 

</body> 
</html> 

回答

2

這是承認非常棘手。邏輯思考代碼。你的JS腳本在你的head

jQuery選擇器el: $('body')尚不存在。 (JavaScript立即執行)。試試做el: 'body'

+0

如果我將腳本移出「head」,它會工作,但我想將腳本保留在「head」中。如果我把'Backbone.View'放在$(function(){...})裏面,這個腳本就可以工作;'所以當DOM準備就緒時,我非常確定,因爲'link'已經存在於DOM中,不會被'Backbone.View'添加。 –

+0

@MassimilianoMarini:但問題是當構建視圖「類」(這是執行'$('body')'函數調用時)'$('body')'不匹配任何東西你的觀點最終會出現錯誤的「el」,並且沒有任何結果。如果你使用'el:'body'',那麼當實例化視圖時,Backbone將查找'el'。 –

+0

@ muistooshort'el:body'作品如果我在''標記之前放腳本。所以這是一個很好的做法,我要這樣。 –

0

您必須初始化您在dom加載事件上的視圖。

var App = Backbone.View.extend({ 

    initialize: function() { 
     _.bindAll(this, 'sayHello'); // you don't need this for your code to work 
    }, 

    events: { 
     'click .link': 'sayHello' 
    }, 

    sayHello: function(e) { 
     alert('Hello!'); 
    } 

}); 


$(function(){ 
    var app = new App({el: $("body")}); 
}); 
相關問題