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事件中可用。
如果您碰巧使用了木偶 ,木偶添加了在视图上show
和render
事件。 看到这个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') } }