view.render()完成后的Backbone.js事件

sch*_*bbi 28 backbone.js

有没有人知道在backbone.js中呈现视图后触发了哪个事件?

abr*_*tez 37

我遇到了这篇看起来很有趣的帖子

var myView = Backbone.View.extend({ 

    initialize: function(options) { 
        _.bindAll(this, 'beforeRender', 'render', 'afterRender'); 
        var _this = this; 
        this.render = _.wrap(this.render, function(render) { 
            _this.beforeRender(); 
            render(); 
            _this.afterRender(); 
            return _this; 
        }); 
    }, 

    beforeRender: function() { 
       console.log('beforeRender'); 
    }, 

    render: function() { 
        return this; 
    }, 

    afterRender: function() { 
        console.log('afterRender'); 
    } 
});
Run Code Online (Sandbox Code Playgroud)

  • @pilau - 请参阅[this](http://blog.bigbinary.com/2011/08/18/understanding-bind-and-bindall-in-backbone.html)以了解_.bind和_.bindAll.它对我有所帮助,希望它对你也有帮助. (2认同)

pil*_*lau 24

或者您可以执行以下操作,这是Backbone代码应该看起来像(Observer模式,又名pub/sub).这是要走的路:

var myView = Backbone.View.extend({ 
    initialize: function() {  
        this.on('render', this.afterRender);

        this.render();
    },

    render: function () {  
        this.trigger('render');
    },

    afterRender: function () {
    }
});
Run Code Online (Sandbox Code Playgroud)

编辑:this.on('render', 'afterRender');不起作用 - 因为Backbone.Events.on只接受功能.该.on('event', 'methodName');魔术是通过成为可能Backbone.View.delegateEvents,因此仅适用于DOM事件.

  • @PHPst:被触发的自定义事件名为`render`,如`this.trigger('render');`.你从哪里得到`show`?你有一些文件的链接吗?据我所知,没有名为`show`的Backbone事件. (2认同)
  • @PHPst你的编辑完全破坏了我的代码,你看到那行`this.trigger('render');`?好吧,因为我在`render`事件(自定义事件,不是Backbone的一部分)上注册`this.afterRender`,所以`this.afterRender`将在渲染模板后被触发.我不知道你为什么要编辑,我正在恢复它.顺便说一下,"show"这个词甚至没有出现在Backbone注释源中...... (2认同)

Arn*_*psa 18

据我所知 - 没有人被解雇.渲染函数在源代码中为空.

render的默认实现是no-op

我建议只在必要时手动触发它.

  • @StefanSchmidt btw - 尝试自己阅读backbone.js源代码.它很可读. (7认同)