4
사용자 정의 Backbone.View 클래스로 추상화하고 싶은 공통 코드가있는 뷰가 몇 개 있습니다. 이 작업을 수행하는 모범 사례가 있습니까?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
예. 만약 당신이 그것들에 추가하려고한다면, 당신은 이니셜 라이저에서 그것을 할 필요가 있습니다 :'_.extend (this.events, { 'event domobject': 'handler', ...})'그렇지 않으면, 상위 클래스에서 전체 이벤트 목록을 복사합니다. 'delegateEvents()'는'initializer' 이후에 발생하므로, 그 후에 아무것도 할 필요가 없습니다. –