如何使它在每次backbone.js视图初始化时都运行一个函数?当初始化主干视图时
我正在寻找一些我可以放在我的普通视图代码之外的东西,作为backbone.js的扩展。
这个想法是减少样板的数量。
谢谢。
如何使它在每次backbone.js视图初始化时都运行一个函数?当初始化主干视图时
我正在寻找一些我可以放在我的普通视图代码之外的东西,作为backbone.js的扩展。
这个想法是减少样板的数量。
谢谢。
由于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 });
这里有一个jsfiddle example
它并不像一个优雅的解决方案,可能与其他语言,但它的工作。
您可以使用Backbone.Events。
在您的应用程序的顶层或全局对象上:
app.eventManager = {};
_.extend(app.eventManager, Backbone.Events);
app.eventManager.bind("newView", app.yourfunction(view));
而且在你希望触发功能的视图的初始化方法:
app.eventManager.trigger("newView", this);
其中“这个”是作为函数的“view”参数传递的视图实例。
使用内置Backbone.js的初始化函数:
http://documentcloud.github.com/backbone/#View-constructor
var ItemView = Backbone.View.extend({
initialize: function(){
alert('View Initialized');
}
});
编辑:我应该更清楚。
在尤因的话在这里找到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"
鸭冲床(或猴补丁,如果你喜欢)骨干对象。
Backbone.View.prototype.initialize = function(){
alert('I overrode the default initialize function!');
}
是的,这就是我现在要做的。这是一个可接受的/好的解决方案。 – Harry 2011-12-25 05:52:54