2017-03-02 2 views
1

Ich habe 3 Backbone-Ansichten (Month, Day, Week).Möglich, mehrere Ansichten in Backbone zu erweitern?

Es gibt einige gemeinsame Code alle 3 teilen, die ich in eine Base Ansicht setzen werde.

Dann gibt es einige gemeinsame Code, Day & Month Aktie, die ich in einem DayAndMonthBase Ansicht und anderen gemeinsamen Code setzen werde, dass Day & Week Aktien, die ich in einem DayAndWeekBase Ansicht gestellt werden. Sowohl die DayAndMonthBase als auch die DayAndWeekBase werden die Base verlängern.

Schließlich wird meine Month Ansicht DayAndMonthBase erweitern und meine Week Ansicht wird meine DayAndWeekBase erweitern. Aber mit meiner Day Ansicht, wie kann ich sowohl die DayAndMonthBase Ansicht als auch die DayAndWeekBase Ansicht erweitern?

Antwort

3

Ich löse diese Art von Problem lieber mit Mixins als mit Vererbung, weil es hier keine klare hierarchische Struktur gibt. Konstrukte wie DayAndMonthBase zusammen mit DayAndWeekBase sind starr und nicht dehnbar. Ich möchte das allgemeine Verhalten als Objekte definieren und dann das Verhalten in die Ansichten unter Verwendung _.extend und nicht Backbone.View.extend injizieren.

Definieren Sie Ihre mixin Objekte

var mixin1 = { 
    .... 
} 

var mixin2 = { 
    .... 
} 

var mixin3 = { 
    .... 
} 

dann diese Mixins in jede Ansicht injizieren, die die Funktionalität benötigt.

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); 

Es ist einfacher, diesen Weg zu folgern, da Sie erinnern nicht die mentale Belastung von dem, was DayAndWeekBase tatsächlich der Fall ist. Wenn Sie Ihre Mixins entsprechend benennen, wird deutlich, welche Art von Funktionalität Sie in die Ansichten injizieren.

Verwandte Themen