2013-03-01 131 views
12

我知道这个问题出现了一百万次,但我已经通过了答案,没有一个帮助。 。jQuery&Backbone点击事件没有触发

JS小提琴:http://jsfiddle.net/ZrYYy/

var LoginView = Backbone.View.extend({ 

    initialize: function() { 

     console.log('Login View Intialized'); 
     this.el = $('#login-container'); 

    }, 

    // Setup the events (mainly the login) 
    events: { 

     // Login - function 
     "click #login-btn" : "checkLogin" 

    }, 

    // Actually authorization function 
    checkLogin: function() { 

     console.log("Authorizing login details with server..."); 

    } 

}); 

// Get it all up and going 
var newLogin = new Login(); 
var loginView = new LoginView({model: newLogin}); 

在小提琴,当我绑定一个正常的$( '#登录-BTN')点击();事件工作正常,虽然它不在我自己的设置(与铬)。骨干点击事件不起作用。

这是标题的样子对我自己的代码

<link href="assets/admin/css/bootstrap.css" rel="stylesheet" type="text/css"> 
<link href="assets/admin/css/bootstrap-responsive.css" rel="stylesheet" type="text/css"> 
<link href="assets/admin/css/style.css" rel="stylesheet" type="text/css"> 
<script src="assets/admin/js/jquery-1.9.1.min.js"></script> 
<script src="http://documentcloud.github.com/underscore/underscore-min.js"></script> 
<script src="http://documentcloud.github.com/backbone/backbone-min.js"></script> 
<script src="assets/admin/backbone/login.js"></script> 
<script src="assets/admin/js/bootstrap.min.js"></script> 

我知道它的最佳实践包括这些在页脚但现在,而这个问题的存在也无所谓(?)。

+0

在Chrome开发者控制台中是否有任何错误? – 2013-03-01 13:06:45

+0

Nope none,直接通过jQuery从控制台绑定点击事件似乎可行。我试过使用.on()等。他们都没有工作。骨干刚刚失败.. – SamV 2013-03-01 13:08:31

+0

'

5

我必须设置EL没有的jQuery为它在工作JSFiddle ... el:'body'

1

正如其他答案所解释的,对于events工作你需要使用el属性。 el属性有必要通过引用el属性中的元素来注册事件。但在某些情况下,html尚未生成。在这些情况下,您可以使用tagName而不是eltagName对于动态生成元素非常有用,就像document.createElement一样。

-1

Backbones el Node定义视图控制器的工作区。只有el内的节点才会受到Backbone渲染方法的影响,收听或更改。

将el设置为尽可能靠近要用View Controller维护的区域,以避免与其他视图控制器发生交叉或不需要的父母操作。

想象一下View1包含View2的区域并在其节点上渲染。如果View2中包含节点引用,View2将不再起作用,因为它们可能会从View1中的渲染中断开。

因此,请注意查看交叉点及其风险。骨干是一个图书馆,而不是一个框架,并不会保护你免于做愚蠢的事情。