2013-03-01 12 views
12

Ich weiß, dass dieses Problem eine Million Mal auftritt, aber ich habe die Antworten durchgelesen und keiner von ihnen hilft. .jQuery & Backbone klicken Ereignisse nicht feuern

JS Fiddle: 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}); 

In der Geige, wenn ich ein normalen $ ('# Login-btn') binden klicken(); Event es funktioniert gut, obwohl es nicht in meinem eigenen Setup (mit Chrom). Das Backbone-Klickereignis funktioniert überhaupt nicht. Diese

ist das, was der Kopf sieht aus wie in meinem eigenen Code

<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> 

Ich weiß, seine beste Praxis diese in der Fußzeile enthalten, aber für jetzt, während dieses Problem besteht es keine Rolle spielt (?).

+0

Gibt es Fehler in der Chrome-Entwicklerkonsole? –

+0

Nein, kein Klick-Ereignis von der Konsole direkt über jQuery zu binden scheint zu funktionieren. Ich habe versucht mit .on() etc .. keiner von ihnen funktioniert auch nicht. Backbone nur fehlschlägt .. – SamV

+0

'

5

I el ohne jQuery zu setzen hatte es in Arbeit JSFiddle ... el: 'body'

1

Wie von anderer Antwort fürerklärtzu arbeiten, müssen Sie el Eigentum verwenden. el Diese Eigenschaft ist erforderlich, um bei der Registrierung von Ereignissen eine Rückgratfunktion zu übernehmen, indem auf das Element in der Eigenschaft el verwiesen wird. In einigen Fällen wird der HTML-Code jedoch noch nicht generiert. In diesen Fällen können Sie tagName anstelle von el verwenden. tagName ist nützlich, um Element dynamisch wie document.createElement zu generieren.

-1

Backbones el Node definiert den Arbeitsbereich des View Controllers.Nur Knoten innerhalb von el werden von Backbones render Methode beeinflusst, angehört oder geändert.

Stellen Sie el so nah wie möglich an den Bereich ein, den Sie mit Ihrem View Controller pflegen möchten, um Überschneidungen oder unerwünschte Überlagerungen mit anderen View Controllern zu vermeiden.

Imagine View1 enthält den View2-Bereich und rendert über seine Knoten. View2 wird nicht mehr funktionieren, wenn es Referenzen von Knoten enthält, da sie durch das Rendering von View1 unterbrochen werden können.

Achten Sie also auf Sichtüberschneidungen und ihre Risiken. Backbone ist eine Bibliothek, kein Framework und schützt Sie nicht davor, dumme Dinge zu tun.