所以我使用的视图是带有标签的侧边栏,所以我创建了一个父类 SidebarView,我从中扩展了两个新类。LeftSidebarView 和 RightSidebarView。这是父类:
define([
'jquery',
'underscore',
'backbone',
'eventbus'
], function ($, _, Backbone, eventBus) {
'use strict';
var SidebarView = Backbone.View.extend({
tabs: [],
isHidden: true,
alignment: '',
el : '',
templateId: '',
milliseconds: 300,
注意“标签:[]”数组。从它扩展的两个类仅具有填充选项卡的初始化函数:
define([
'jquery',
'underscore',
'backbone',
'views/sidebar',
'eventbus',
'views/search'
], function ($, _, Backbone, SidebarView, eventBus, SearchView) {
'use strict';
var RightSidebarView = SidebarView.extend({
alignment: 'right',
el: "#rightSidebar",
templateId: '#sidebarTemplate',
initialize : function() {
this.tabs['search'] = new SearchView({model: this.model});
}
});
return RightSidebarView;
});
另一个是:
/*global define*/
define([
'jquery',
'underscore',
'backbone',
'views/sidebar',
'views/listings',
'views/listingDetails',
'eventbus'
], function ($, _, Backbone, SidebarView, ListingsView, ListingDetailsView, eventBus) {
'use strict';
var LeftSidebarView = SidebarView.extend({
alignment: 'left',
el: "#leftSidebar",
templateId: '#sidebarTemplate',
initialize : function() {
this.tabs['listings'] = new ListingsView({collection: this.collection);
this.tabs['listingDetails'] = new ListingDetailsView();
}
});
return LeftSidebarView;
});
在我的 main.js 文件中,我这样做:
var leftSidebarView = new LeftSidebarView({collection:listings});
var rightSidebarView = new RightSidebarView({model: searchModel});
发生的情况是作为 LeftSidebarView 实例的 leftSideBarView 和作为 RightSidebarView 实例的 rightSidebarView 在 this.tabs 中都有 3 个成员。看起来像。我仍然认为自己是一个 javascript 菜鸟,所以我不得不问这是否是预期的行为?为什么会这样?我查看了 _.extend 的文档,它说它返回一个副本而不是参考。所以我对发生这种情况感到有点惊讶。
编辑:更好地制定了介绍,并稍微清理了代码。