2011-10-06 15 views
6

Przechodzi przez bardzo prosty samouczek dotyczący widoków backbone.js.Zdarzenie clickboks.js nie odpala

Oczekiwane zachowanie polega na wywołaniu funkcji renderowania po kliknięciu przycisku #sayhello. Render po prostu używa metody html jQuery do wstawienia "hello Bud Abbota" w el.

Po kliknięciu przycisku #sayhello nic się nie dzieje. Bez błędów i niczego. Ustawiam punkt przerwania w firebugu i oglądam go po prostu pomijając funkcję renderowania.

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

}); 

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

Co dziwne jest to, kiedy to zmienić:

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

do tego:

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

Metoda renderowania jest wywoływana, ale gdy próbuję zrobić to zdarzenie - nie ma kości. Każda pomoc w zrozumieniu tego, co robię źle, jest bardzo doceniana.

Odpowiedz

11

To dlatego, że #sayhello nie jest częścią Twojego widoku. Spróbuj umieścić #sayhello wewnątrz #helloworld:

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

woot! dziękuję – tim

+0

dzięki! podstawowe i nadal to zapominam –

2

Jeśli dynamicznie renderowania strony przy użyciu szablonów, a następnie w funkcji renderowania rozważyć powołanie view.setElement (...);

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

Powiązane problemy