2011-10-06 32 views
6

Repasando un tutorial muy básico sobre las vistas de backbone.js.backbone.js haga clic en el evento que no se activa

El comportamiento esperado es llamar a la función de procesamiento cuando se hace clic en el botón #sayhello. Render simplemente usa el método html de jQuery para poner "hello Bud Abbot" en el.

Pero cuando hago clic en el botón #sayhello, no pasa nada. Sin errores ni nada. Establecí un punto de interrupción en Firebug y miro cómo salta la función de renderizado.

Aquí está la JS:

App = (function($){ 
jQueryView = Backbone.View.extend({ 
    initialize: function(){ 
     this.el = $(this.el); 
    } 
}); 

HelloWorldView = jQueryView.extend({ 
    el: $('#helloworld'), 
    events:{ 'click #sayhello': 'render' 
    }, 
    initialize: function(params){ 
     jQueryView.prototype.initialize.call(this); 
     this.name = params.name; 
    }, 

    render: function(){ 
     console.log("rendering"); 
     this.el.html("hello " + this.name); 
    } 
}); 

var self = {}; 
self.start = function(){ 
    new HelloWorldView({name: 'Bud Abbot'}); 
}; 
return self; 

}); 

Y aquí está el html:

<div id="helloworld"></div> 
<button id="sayhello">Say Hello</button> 

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script> 
<script src="http://ajax.cdnjs.com/ajax/libs/underscore.js/1.1.4/underscore-min.js"></script> 
<script src="http://ajax.cdnjs.com/ajax/libs/backbone.js/0.3.3/backbone-min.js"></script> 

Lo que parece extraño es cuando cambio esto:

new HelloWorldView({name: 'Bud Abbot'}); 

a esto:

new HelloWorldView({name: 'Bud Abbot'}).render(); 

se invoca el método de representación, pero cuando intento hacerlo con un evento, no hay dados. Cualquier ayuda para entender lo que estoy haciendo mal es muy apreciada.

Respuesta

11

Es porque #sayhello no es parte de su vista. Trate de poner #sayhello dentro #helloworld:

<div id="helloworld"> 
    <button id="sayhello">Say Hello</button> 
</div> 
+0

¡woot! gracias – tim

+0

gracias! básico y aún lo olvido –

2

Si se renderiza de forma dinámica la página utilizando las plantillas, a continuación, en la función de hacer que considere llamar view.setElement (...);

this.setElement ($ ('# login-container'));

Cuestiones relacionadas