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 });
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!');
}
3条答案
按热度按时间klh5stk11#
由于Javascript不是一种真正的面向对象的编程语言,所以你不能像使用java或c#那样使用继承来解决问题。
一个可能的解决方案是使用工厂设计模式。
您可以调用一个将示例化视图的工厂方法,而不是直接示例化视图。
这是一个jsfiddle example
这不是一个优雅的解决方案,在其他语言中也是可能的,但它确实完成了这项工作。
4szc88ey2#
使用内置的backbone.js初始化函数:
http://documentcloud.github.com/backbone/#View-constructor
编辑:我应该说得更清楚一点。
用帕特里克·尤因的话说,这里发现了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"
鸭子打孔(或猴子面片,如果您喜欢)脊椎对象。
brvekthn3#
您可以使用Backbone.Events。
在应用程序的顶层或全局对象上:
在任何视图的initialize方法中,您都希望触发函数:
其中“this”是作为“view”参数传递给函数的视图示例。