4
我有几个视图有我想要抽象成自定义Backbone.View类的通用代码。有没有这样做的最佳做法?Subclassing Backbone.View
是一个很好的模式来做这样的事情吗? :
// Base Grid view
var GridView = Backbone.View.extend({
initialize : function(){
//common view init code ..
//do the plug in overrides
if (options.addHandler)
this.addHandler = options.addHandler;
if (options.events)
//?? extend default events or override?
this.events = $.extend(this.events, options.events);
},
addHandler : function() {
//defaulthandler this code can be overridden
});
});
// in another object create some views from the GridView base
....
var overrides = { events:"xxx yyy", el: ulElement addHandler: myAddFunction }
var UserList = GridView.extend(overrides)
var userList = new UserList(users, options);
....
var coursesOverrides : {addHandler: ...}
var coursesOptions: {el: courseElement, ...}
var CourseList = GridView.extend(coursesOverrides)
var courseList= new CourseList (courses, coursesOptions)
// along the same lines maybe there's an abstraction for toolbar views
var ClassToolbarView = ToolbarBase.extend(toolOverrides)
var classtoolbar = new ClassToolbarView(actions, toolbaropts)
任何指向扩展视图重构通用视图代码的好例子的指针,
对不起一些伪过早there..saved所以我做了一些修改。我掌握了我认为处理覆盖的模式的要点。你需要为视图事件字符串做些特别的事情吗? – claya 2012-02-09 01:14:49
是的。如果你打算添加它们,你需要在初始化程序中完成:'_.extend(this.events,{'event domobject':'handler',...})'否则,你将会拥有从父类复制整个事件列表。 'delegateEvents()'发生在'initializer'之后,所以你不需要做任何事情。 – 2012-02-09 01:38:33