2017-03-02 21 views
1

我有3個主幹視圖(Month,Day,Week)。可能在主幹中擴展多個視圖?

有一些共同的代碼,我將在Base視圖。

然後有一些共同的代碼,Day & Month份額,我會放在一個DayAndMonthBase視圖和其他常見的代碼,我會把Day & Week份額在DayAndWeekBase視圖。 DayAndMonthBaseDayAndWeekBase都將擴展Base

最後,我Month視圖將延長DayAndMonthBase和我Week視圖將延長我的DayAndWeekBase。但是,通過我的Day視圖,如何擴展DayAndMonthBase視圖以及DayAndWeekBase視圖?

回答

3

我喜歡用mixin而不是繼承來解決這類問題,因爲這裏沒有明確的層次結構。諸如DayAndMonthBase以及DayAndWeekBase這樣的結構是僵化且不可擴展的。我喜歡做的是將常見行爲定義爲對象,然後使用_.extend而不是Backbone.View.extend將行爲注入到視圖中。

定義你的mixin對象

var mixin1 = { 
    .... 
} 

var mixin2 = { 
    .... 
} 

var mixin3 = { 
    .... 
} 

然後,這些混入注入到每個需要的功能視圖。

var Day = Backbone.View.extend({ 
    .... 
}) 
_.extend(Day.prototype, mixin1); 
_.extend(Day.prototype, mixin2); 
_.extend(Day.prototype, mixin3); 


var Week = Backbone.View.extend({ 
    .... 
}) 
_.extend(Week.prototype, mixin1); 


var Month = Backbone.View.extend({ 
    .... 
}) 
_.extend(Month.prototype, mixin2); 

它很容易推理這種方式,因爲你沒有記住什麼DayAndWeekBase實際上做的心理負荷。如果你適當地給你的mixin命名,很明顯看到你正在向視圖中注入什麼樣的功能。