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

有没有人知道在backbone.js中显示视图后会触发哪个事件?

据我所知, 没有人被解雇 。 渲染函数在源代码中是空的。

渲染的默认实现是无操作的

我build议在必要时手动触发它。

我碰到这个看起来很有趣的post

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'); } }); 

或者你可以做下面的事,这就是Backbone代码应该看起来像(观察者模式,又名pub / sub)。 这是要走的路:

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

编辑: this.on('render', 'afterRender'); 将不起作用 – 因为Backbone.Events.on只接受函数。 .on('event', 'methodName'); Backbone.View.delegateEvents使得魔术成为可能,并且因此仅在DOM事件中可用。

如果您碰巧使用了木偶 ,木偶添加了在视图上showrender事件。 看到这个StackOverflow问题的例子。

在附注中,Marionette增加了许多您可能感兴趣的其他有用function。

您可以将事件添加到视图的“事件”部分,而不是手动添加事件处理程序以在初始化上呈现。 请参阅http://backbonejs.org/#View-delegateEvents

例如

 events: { 'render': 'afterRender' } afterRender: function(e){ alert("render complete") }, 
  constructor: function(){ Backbone.View.call(this, arguments); var oldRender = this.render this.render = function(){ oldRender.call(this) // this.model.trigger('xxxxxxxxx') } } 

像这样http://jsfiddle.net/8hQyB/