如何在每次初始化backbone.js视图时运行函数?
我正在寻找一些我可以放在普通视图代码之外的东西,作为backbone.js的扩展。
这个想法是减少样板量。
感谢。
答案 0 :(得分:3)
由于Javascript不是真正面向对象的编程语言,因此如果是java或c#,就不能使用继承来解决问题。
一种可能的解决方案是使用工厂设计模式。
您可以调用将实例化视图的工厂方法,而不是直接实例化视图。
var viewFactory = function(view, viewOptions) {
//perform your boilerplate code
return new view(viewOptions);
}
AView = Backbone.View.extend({});
var person = new Backbone.Model({name: 'Paul'});
var view = viewFactory(AView, { model: person });
它不是一种可以与其他语言一起使用的优雅解决方案,但它可以完成这项工作。
答案 1 :(得分:3)
使用builtin backbone.js初始化函数:
http://documentcloud.github.com/backbone/#View-constructor
var ItemView = Backbone.View.extend({
initialize: function(){
alert('View Initialized');
}
});
编辑:我应该更清楚。
用Patrick Ewing的话来http://podcast.rubyonrails.org/programs/1/episodes/railsconf-2007:
"if it walks like a duck and talks like a duck, it’s a duck, right? So if this duck is not giving you the noise that you want, you’ve got to just punch that duck until it returns what you expect"
Duck Punch(如果你愿意,可以使用Monkey Patch)Backbone对象。
Backbone.View.prototype.initialize = function(){
alert('I overrode the default initialize function!');
}
答案 2 :(得分:1)
您可以使用Backbone.Events。
在应用的顶层或全局对象上:
app.eventManager = {};
_.extend(app.eventManager, Backbone.Events);
app.eventManager.bind("newView", app.yourfunction(view));
在任何视图的initialize方法中,你想触发你的函数:
app.eventManager.trigger("newView", this);
其中“this”是作为“view”参数传递给您的函数的视图实例。