可以在 Backbone 中扩展多个视图吗?

Possible to extend multiple views in Backbone?

我有 3 backbone 次观看(MonthDayWeek)。

我将在 Base 视图中放置 3 个共享的一些通用代码。

然后是 Day & Month 共享的一些通用代码,我将把它们放在 DayAndMonthBase 视图中,还有其他 Day & Week 分享,我将把它放在 DayAndWeekBase 视图中。 DayAndMonthBaseDayAndWeekBase 都将扩展 Base.

最后,我的 Month 视图将扩展 DayAndMonthBase,我的 Week 视图将扩展我的 DayAndWeekBase。但是,对于我的 Day 视图,如何扩展 DayAndMonthBase 视图和 DayAndWeekBase 视图?

我喜欢用混合而不是继承来解决这类问题,因为这里没有清晰的层次结构。像 DayAndMonthBaseDayAndWeekBase 这样的结构是死板且不可扩展的。我喜欢做的是将常见行为定义为对象,然后使用 _.extend 而不是 Backbone.View.extend.

将行为注入视图

定义你的 mixin 对象

var mixin1 = {
    ....
}

var mixin2 = {
    ....
}

var mixin3 = {
    ....
}

然后将这些 mixins 注入到每个需要该功能的视图中。

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,就可以清楚地看到您正在向视图中注入什么样的功能。