有人知道在backbone.js中呈现视图后会触发哪个事件吗?
答案 0 :(得分:37)
我遇到了这个似乎很有趣的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');
}
});
答案 1 :(得分:23)
或者您可以执行以下操作,这是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 () {
}
});
修改:this.on('render', 'afterRender');
无效 - 因为Backbone.Events.on
仅接受功能。 .on('event', 'methodName');
使Backbone.View.delegateEvents
魔法成为可能,因此仅适用于DOM事件。
答案 2 :(得分:18)
答案 3 :(得分:2)
如果您正在使用Marionette,Marionette会在视图中添加show
和render
个事件。有关示例,请参阅this StackOverflow question。
另一方面,Marionette添加了许多您可能感兴趣的其他有用功能。
答案 4 :(得分:0)
我意识到这个问题已经很老了,但是我想要一个解决方案,该解决方案允许在每次调用render
之后都调用相同的自定义函数,所以想出了以下...
首先,覆盖默认的骨干render
功能:
var render = Backbone.View.prototype.render;
Backbone.View.prototype.render = function() {
this.customRender();
afterPageRender();
render();
};
以上代码在视图上调用customRender
,然后调用通用自定义函数(afterPageRender
),然后调用原始Backbone render
函数。
然后,在我看来,我将render
函数的所有实例替换为customRender
:
initialize: function() {
this.listenTo(this.model, 'sync', this.render);
this.model.fetch();
},
customRender: function() {
// ... do what you usually do in render()
}
答案 5 :(得分:-1)
除了手动添加事件处理程序以在初始化时渲染,您还可以将事件添加到视图的“事件”部分。见http://backbonejs.org/#View-delegateEvents
e.g。
events: {
'render': 'afterRender'
}
afterRender: function(e){
alert("render complete")
},
答案 6 :(得分:-3)
constructor: function(){
Backbone.View.call(this, arguments);
var oldRender = this.render
this.render = function(){
oldRender.call(this)
// this.model.trigger('xxxxxxxxx')
}
}