Initial commit
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
var Backbone = require('backbone');
|
||||
var InfoboxModel = require('./infobox-item-model');
|
||||
var _ = require('underscore');
|
||||
|
||||
/*
|
||||
* Infobox states collection
|
||||
*/
|
||||
|
||||
module.exports = Backbone.Collection.extend({
|
||||
model: InfoboxModel,
|
||||
|
||||
initialize: function () {
|
||||
this._initBinds();
|
||||
},
|
||||
|
||||
reset: function (models, options) {
|
||||
this._defaultSelected(models);
|
||||
Backbone.Collection.prototype.reset.call(this, models, options);
|
||||
},
|
||||
|
||||
_initBinds: function () {
|
||||
this.on('change:selected', this._onSelectedChange, this);
|
||||
this.on('reset', this._defaultSelected, this);
|
||||
},
|
||||
|
||||
_defaultSelected: function (models) {
|
||||
var selected = _.first(_.where(models, {selected: true}));
|
||||
if (!selected) {
|
||||
selected = _.first(models);
|
||||
if (this._isModel(selected)) {
|
||||
selected.set({selected: true}, {silent: true});
|
||||
} else {
|
||||
selected.selected = true;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
_onSelectedChange: function (changedModel, isSelected) {
|
||||
if (isSelected) {
|
||||
this.each(function (m) {
|
||||
if (m.cid !== changedModel.cid) {
|
||||
m.set({selected: false}, {silent: true});
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
getState: function (state) {
|
||||
return _.first(this.where({state: state}));
|
||||
},
|
||||
|
||||
getSelected: function () {
|
||||
var selected;
|
||||
selected = _.first(this.where({selected: true}));
|
||||
return selected;
|
||||
},
|
||||
|
||||
setSelected: function (state) {
|
||||
var selectedModel;
|
||||
|
||||
this.each(function (mdl) {
|
||||
if (mdl.get('state') === state) {
|
||||
mdl.set({selected: true}, {silent: true});
|
||||
selectedModel = mdl;
|
||||
} else {
|
||||
mdl.set({selected: false}, {silent: true});
|
||||
}
|
||||
});
|
||||
|
||||
return selectedModel;
|
||||
}
|
||||
|
||||
});
|
||||
Reference in New Issue
Block a user