Initial commit
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
var Backbone = require('backbone');
|
||||
var _ = require('underscore');
|
||||
|
||||
module.exports = Backbone.Collection.extend({
|
||||
constructor: function (models, options) {
|
||||
options = _.extend(options || {}, { silent: false });
|
||||
Backbone.Collection.prototype.constructor.call(this, models, options);
|
||||
},
|
||||
|
||||
initialize: function (models, options) {
|
||||
this._disabledTabs = options.disabledTabs;
|
||||
|
||||
this._initBinds();
|
||||
|
||||
this._setSelected();
|
||||
},
|
||||
|
||||
_initBinds: function () {
|
||||
this.bind('reset', this._setSelected, this);
|
||||
this.bind('change:selected', this._onSelectedChange, this);
|
||||
},
|
||||
|
||||
getSelected: function () {
|
||||
return this.find(function (model) {
|
||||
return model.get('selected');
|
||||
});
|
||||
},
|
||||
|
||||
getDefault: function () {
|
||||
return this.find(function (model) {
|
||||
return model.get('name') === this.getDefaultName();
|
||||
}, this);
|
||||
},
|
||||
|
||||
getDisabledTabs: function () {
|
||||
return this._disabledTabs || [];
|
||||
},
|
||||
|
||||
getDefaultName: function () {
|
||||
return this._defaultTab;
|
||||
},
|
||||
|
||||
isDisabledTab: function (name) {
|
||||
var disabledTab = this.find(function (model) {
|
||||
return model.get('disabled') && model.get('name') === name;
|
||||
});
|
||||
|
||||
return !!disabledTab;
|
||||
},
|
||||
|
||||
_setSelected: function () {
|
||||
var isSelected = this.getSelected();
|
||||
|
||||
if (!isSelected && this.size() > 0) {
|
||||
this.at(0).set('selected', true);
|
||||
}
|
||||
},
|
||||
|
||||
_onSelectedChange: function (itemModel, isSelected) {
|
||||
if (!isSelected) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.each(function (model) {
|
||||
if (model !== itemModel) {
|
||||
model.set('selected', false);
|
||||
}
|
||||
}, this);
|
||||
},
|
||||
|
||||
select: function (name, value) {
|
||||
var model = this.find(function (m) {
|
||||
return m.get(name) === value;
|
||||
}, this);
|
||||
|
||||
if (model) {
|
||||
model.set('selected', true);
|
||||
}
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user