そこで、タブを持つサイドバーであるビューを使用しているので、2 つの新しいクラスを拡張する親クラス 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,
「tabs: []」配列に注意してください。そこから拡張する 2 つのクラスには、タブを設定する初期化関数しかありません。
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;
});
もう1つは次のとおりです。
/*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 のドキュメントを見たところ、参照ではなくコピーを返すと書かれています。ですから、この出来事にはちょっと驚いています。
編集: 導入部をもう少しよく定式化し、コードを少しきれいにしました。