2011-04-16 91 views
4

我的事件不像我所希望的那樣工作,我想我知道爲什麼。當單擊跨頁跨度時,一切都呈現正確。但我意識到 - 也許這些事件不會重新貼上新的標記?那可能是爲什麼它只能工作一次? (如果我點擊數字10的跨度,應該出現10個項目,但之後,我點擊的任何東西都不會改變任何東西)backbone.js - 只發生一次的事件

什麼是更好的方法來組織這個?模板是否應該不包含分頁部分?在再次渲染後,我如何將骨幹事件附加到標記上?

var ListView = Backbone.View.extend({ 

    initialize: function() { 
     var self = this; 
     this.collection.bind("refresh", function(){self.render();}); 
     this.render(); 
    }, 

    events: { 
     'click ul#perpage span': 'setperpage' 
    }, 

    setperpage: function(event) { 
     this.collection.perpageurl = '/perpage/' + $(event.target).text(); 
     this.collection.fetch(); 
     this.collection.refresh(); 
    }, 

    render: function() { 

    template = _.template('\ 
    <table>\ 
    <% _(collection).each(function(model){%>\ 
    <tr><td><%=model.id%></td><td><%=model.name%></td><td><%=model.email%></td></tr>\ 
    <%}); %>\ 
    </table>\ 
    <ul id="perpage">\ 
    <li><span>5</span></li>\ 
    <li><span>10</span></li>\ 
    </ul>\ 
    '); 

     var context = {collection: this.collection.toJSON()}; 
     $(this.el).html(template(context)); 
     $('#app').html(this.el); 
     return this; 
    } 
}); 
+2

'event.target'可能會引起誤解,您應該按照http://www.quirksmode.org/js/events_order.html中所述使用'event.currentTarget' – pawlik 2011-04-16 22:05:20

回答

11

嘗試:

render: function() 
{ 
    // … 

    this.delegateEvents(); 
    return this; 
} 

爲了調試在JavaScript事件使用Visual Event。它會告訴你哪些元素附有事件。