因此,我使用的视图是在其中包含选项卡的边栏,因此我创建了一个父类SidebarView,从中扩展了两个新类。 LeftSidebarView和RightSidebarView。这里是父类:使用requirejs在backbonejs中扩展视图
define([
'jquery',
'underscore',
'backbone',
'eventbus'
], function ($, _, Backbone, eventBus) {
'use strict';
var SidebarView = Backbone.View.extend({
tabs: [],
isHidden: true,
alignment: '',
el : '',
templateId: '',
milliseconds: 300,
注意“tabs:[]”数组。从其扩展只在他们初始化函数的两个类填充选项卡:
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 noob,所以我必须问这是否是预期的行为?为什么会发生?我查看了_.extend的文档,它说它会返回一个不是引用的副本。所以我有点惊讶于这种情况。
编辑:制定了一些更好的介绍和清理代码。
这是一个有点不仅仅是调用扩展更加复杂。这里有一篇文章让你走上正轨。 http://stackoverflow.com/questions/7735133/backbone-js-view-inheritance – 2013-04-25 18:44:50
我的问题不是关于parrent函数没有被调用,因为我重写了它们。我遇到的问题是leftSidebarView.tabs === rightSidebarView.tabs – aledujke 2013-04-25 18:52:07