2012-02-09 57 views
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) 

任何指向扩展视图重构通用视图代码的好例子的指针,

回答

4

首先,我看不到您的initializer()中传递的选项,所以这是一个错误。

其次,.extend()方法是继承:

var GridView = Backbone.View.extend({ ... }) 
var GridViewWithNewFunctionsAndEvents = GridView.extend({ ... }) 

而且可以更换或扩展GridView控件的功能,并调用new GridViewWithNewFunctionsAndEvents()并在你需要一个新的对象获得额外的功能,就像你延长骨干股票查看课程。

如果您需要延长初始化,你可以做到这一点来调用父类的初始化:

var GridViewWithNewFunctionsAndEvents = GridView.extend({ 
    initializer: function(options) { 
     GridView.prototype.initializer.call(this, options); 
     /* Your stuff goes here */ 
    } 
    }); 
+0

对不起一些伪过早there..saved所以我做了一些修改。我掌握了我认为处理覆盖的模式的要点。你需要为视图事件字符串做些特别的事情吗? – claya 2012-02-09 01:14:49

+0

是的。如果你打算添加它们,你需要在初始化程序中完成:'_.extend(this.events,{'event domobject':'handler',...})'否则,你将会拥有从父类复制整个事件列表。 'delegateEvents()'发生在'initializer'之后,所以你不需要做任何事情。 – 2012-02-09 01:38:33