backbone.js:呈现视图时的Fire事件

时间:2013-08-27 14:04:36

标签: javascript twitter-bootstrap backbone.js backbone-views backbone-events

我正在使用Resthub开发一个web应用程序,因此在前端有一个backbone.js堆栈。我需要调用一个方法,每次渲染一个新的视图(也是各种子视图),添加一些Twitter-Bootstrap特定的东西(帮助弹出窗口,一种快速帮助,从全局json文件中获取他们的选项,所以帮助文本更容易维护。

据我所知,每次呈现视图时都没有激活骨干内置事件。

所以我的问题是:扩展所有视图的最简单方法是什么,以便在(隐式或显式)调用render方法时触发事件。我想扩展我的所有视图,因为我不希望在我拥有的所有视图中手动触发此事件,因为它容易出错,并且所有开发人员都必须记住他们必须触发该事件。

1 个答案:

答案 0 :(得分:2)

如果你想在调用render方法时为所有情况做某事(触发事件或其他任何事情),最直接的方法可能是更新Backbone源代码副本中的render方法(假设你想要的话)整个项目的行为)。 默认情况下,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'然后可以在调用渲染之前/之后调用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。