我有3个主干视图(Month
,Day
,Week
)。
我将在Base
视图中添加一些共同的代码。
然后有一些Day
&我将Month
分享DayAndMonthBase
视图以及Day
& Week
分享我将DayAndWeekBase
视图中的内容。 DayAndMonthBase
和DayAndWeekBase
都会扩展Base
。
最后,我的Month
视图会展开DayAndMonthBase
,我的Week
视图会展开DayAndWeekBase
。但是,在我的Day
视图中,如何同时展开DayAndMonthBase
视图以及DayAndWeekBase
视图?
答案 0 :(得分:3)
我喜欢使用mixins而不是继承来解决这类问题,因为这里没有明确的层次结构。像DayAndMonthBase
和DayAndWeekBase
这样的构造是僵硬且不可扩展的。我想要做的是将常见行为定义为对象,然后使用_.extend
而不是Backbone.View.extend
将行为注入到视图中。
定义你的mixin对象
var mixin1 = {
....
}
var mixin2 = {
....
}
var mixin3 = {
....
}
然后将这些mixin注入需要该功能的每个View中。
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
实际做什么的心理负担。如果你恰当地命名mixins,很明显你会在视图中注入哪种功能。