如果您想在调用 render 方法的所有情况下做某事(触发事件或其他任何事情),最直接的方法可能是在 Backbone 的源代码副本中更新 render 方法(假设您希望行为跨越该项目)。默认情况下,渲染方法只返回 'this'
render: function() {
return this;
},
如果在渲染之前你总是想做一些事情,你可以在渲染方法中添加它
render: function() {
//add your extra code/call
return this;
},
或者,您也可以覆盖 Backbone.View 函数的原型并更新/创建您自己的版本,例如
_.extend(Backbone.View.prototype, Backbone.Events, {
render: function() {
console.log('This is a test');
return this;
}
});
var testView = Backbone.View.extend({
});
var testview = new testView();
testview.render(); //displays This is a test
//any view rendered will now have the console log
更进一步,您可以添加自己的渲染版本,将其称为“myrender”和/或添加您自己的事件,例如“myevent”,然后可以在您调用 render/myrender 之前/之后调用它
_.extend(Backbone.View.prototype, Backbone.Events, {
render: function() {
//console.log('This is a test');
this.mynewevent();
return this;
},
myrender: function() {
console.log('Pre-render work');
this.render();
},
mynewevent: function() {
console.log('New Event work');
}
});
var testView = Backbone.View.extend({
});
var testview = new testView();
//testview.render();
testview.myrender();
Underscore 的扩展在这里被使用,因为 Backbone 依赖于 Underscore,如果您使用 Backbone,Underscore 也应该可供您使用。