backbone.js - 仅触发一次的事件

Mat*_*hew 4 javascript jquery backbone.js underscore.js

我的活动没有像我希望的那样发挥作用,我想我知道为什么.单击perpage跨度时,所有内容都会正确呈现.但我意识到 - 也许这些事件没有重新附加到新标记上?难道这就是它只运作一次的原因吗?(如果我单击其中包含数字10的跨度,则会显示10个项目.但之后,我点击的任何内容都不会改变任何内容)

有什么更好的方法来组织这个?模板是否应该包含分页部分?如何在再次渲染后将骨干事件附加到标记?

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;
    }
});
Run Code Online (Sandbox Code Playgroud)

paw*_*lik 11

尝试:

render: function()
{
    // …

    this.delegateEvents();
    return this;
}
Run Code Online (Sandbox Code Playgroud)

对于JavaScript中的调试事件,请使用Visual Event.它会告诉您哪些元素附加了事件.