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

时间:2017-03-02 18:44:51

标签: javascript backbone.js backbone-views

我有3个主干视图(MonthDayWeek)。

我将在Base视图中添加一些共同的代码。

然后有一些Day&我将Month分享DayAndMonthBase视图以及Day& Week分享我将DayAndWeekBase视图中的内容。 DayAndMonthBaseDayAndWeekBase都会扩展Base

最后,我的Month视图会展开DayAndMonthBase,我的Week视图会展开DayAndWeekBase。但是,在我的Day视图中,如何同时展开DayAndMonthBase视图以及DayAndWeekBase视图?

1 个答案:

答案 0 :(得分:3)

我喜欢使用mixins而不是继承来解决这类问题,因为这里没有明确的层次结构。像DayAndMonthBaseDayAndWeekBase这样的构造是僵硬且不可扩展的。我想要做的是将常见行为定义为对象,然后使用_.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,很明显你会在视图中注入哪种功能。