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