2012-02-09 58 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