相关疑难解决方法(0)

Backbone:重新渲染时丢失了事件

我有超级视图谁负责渲染子视图.当我重新渲染超视图中的所有事件的子视图都将丢失.

这是一个例子:

var SubView = Backbone.View.extend({
    events: {
        "click": "click"
    },

    click: function(){
        console.log( "click!" );
    },

    render: function(){
        this.$el.html( "click me" );
        return this;
    }
});

var Composer = Backbone.View.extend({
    initialize: function(){
        this.subView = new SubView();
    },

    render: function(){
        this.$el.html( this.subView.render().el );             
    }
});


var composer = new Composer({el: $('#composer')});
composer.render();
Run Code Online (Sandbox Code Playgroud)

当我点击click me div时,会触发事件.如果我composer.render()再次执行,所有内容看起来都很相似,但不会再触发click事件.

检查工作jsFiddle.

javascript-events backbone.js backbone-events

37
推荐指数
2
解决办法
1万
查看次数

backbone.js事件在重新渲染后没有触发

[编辑:我通过调用delegateEvents()解决了早期的问题,但不应该这样做.重新发布更多信息.]

我有一个View,当渲染时它上面有一个登录按钮并附加了一个点击事件.首先渲染所有工作:单击按钮,成功调用ajax后,登录提示消失,并显示欢迎视图(LoggedInView).但是,如果我稍后导航回此视图(#foo),UI呈现但事件关联消失,而无需通过调用delegateEents()手动强制解决问题.

发生了什么事,我的事件没有重新关联自己?

LoginView = Backbone.View.extend({
    template: _.template($("#loginTemplate").html()),
    initialize: function(stuff,router) {
        _.bindAll(this,'render','rc','gotProfile');
        this.model.bind("rc",this.rc)
        this.router = router;
    },
    events: {
        'click .loginButton': 'login'
    },  
    render: function() {
        $(this.el).html(this.template(this.model.toJSON()));
        $(this.el).find(".actionButton").button();  // Button
//      this.delegateEvents(this.events);  // NEEDED!  Re-wire events on re-render
        return this;
    },
    rc: function(code) {
        switch(code) {
            case errCodes.USER_NOT_FOUND:   this.notFound(); break;
            case errCodes.OK:               this.loginOk(); break;
            default:                            this.otherErr(); break;
        }
    },
    login: function() {
        clearErrors( $('[rel="req"]') );
        var okReq = validate( $('#login [rel="req"]'), validateReq );
        var okEmail = validate( [$('#uid')], validateEmail ); …
Run Code Online (Sandbox Code Playgroud)

events backbone.js

24
推荐指数
1
解决办法
9751
查看次数