可以在 Backbone 中扩展多个视图吗?
Possible to extend multiple views in Backbone?
我有 3 backbone 次观看(Month
、Day
、Week
)。
我将在 Base
视图中放置 3 个共享的一些通用代码。
然后是 Day
& Month
共享的一些通用代码,我将把它们放在 DayAndMonthBase
视图中,还有其他 Day
& Week
分享,我将把它放在 DayAndWeekBase
视图中。 DayAndMonthBase
和 DayAndWeekBase
都将扩展 Base
.
最后,我的 Month
视图将扩展 DayAndMonthBase
,我的 Week
视图将扩展我的 DayAndWeekBase
。但是,对于我的 Day
视图,如何扩展 DayAndMonthBase
视图和 DayAndWeekBase
视图?
我喜欢用混合而不是继承来解决这类问题,因为这里没有清晰的层次结构。像 DayAndMonthBase
和 DayAndWeekBase
这样的结构是死板且不可扩展的。我喜欢做的是将常见行为定义为对象,然后使用 _.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,就可以清楚地看到您正在向视图中注入什么样的功能。
我有 3 backbone 次观看(Month
、Day
、Week
)。
我将在 Base
视图中放置 3 个共享的一些通用代码。
然后是 Day
& Month
共享的一些通用代码,我将把它们放在 DayAndMonthBase
视图中,还有其他 Day
& Week
分享,我将把它放在 DayAndWeekBase
视图中。 DayAndMonthBase
和 DayAndWeekBase
都将扩展 Base
.
最后,我的 Month
视图将扩展 DayAndMonthBase
,我的 Week
视图将扩展我的 DayAndWeekBase
。但是,对于我的 Day
视图,如何扩展 DayAndMonthBase
视图和 DayAndWeekBase
视图?
我喜欢用混合而不是继承来解决这类问题,因为这里没有清晰的层次结构。像 DayAndMonthBase
和 DayAndWeekBase
这样的结构是死板且不可扩展的。我喜欢做的是将常见行为定义为对象,然后使用 _.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,就可以清楚地看到您正在向视图中注入什么样的功能。