55 lines
1.3 KiB
JavaScript
55 lines
1.3 KiB
JavaScript
|
var Backbone = require('backbone');
|
||
|
var _ = require('underscore');
|
||
|
|
||
|
var INPUT_TYPE_ORDER = ['color', 'image'];
|
||
|
|
||
|
module.exports = Backbone.Collection.extend({
|
||
|
constructor: function (models, options) {
|
||
|
options = _.extend(options || {}, { silent: false });
|
||
|
Backbone.Collection.prototype.constructor.call(this, models, options);
|
||
|
},
|
||
|
|
||
|
comparator: function (model) {
|
||
|
return INPUT_TYPE_ORDER.indexOf(model.get('type'));
|
||
|
},
|
||
|
|
||
|
initialize: function () {
|
||
|
this.bind('change', this._onModelsChanged, this);
|
||
|
this.bind('change:selected', this._onSelectedChange, this);
|
||
|
},
|
||
|
|
||
|
getSelected: function () {
|
||
|
return this.find(function (model) {
|
||
|
return model.get('selected');
|
||
|
});
|
||
|
},
|
||
|
|
||
|
unselect: function () {
|
||
|
this.each(function (model) {
|
||
|
model.set('selected', false);
|
||
|
}, this);
|
||
|
},
|
||
|
|
||
|
_onSelectedChange: function (itemModel, isSelected) {
|
||
|
if (!isSelected) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
this.each(function (model) {
|
||
|
if (model !== itemModel) {
|
||
|
model.set('selected', false);
|
||
|
}
|
||
|
}, this);
|
||
|
},
|
||
|
|
||
|
_onModelsChanged: function (model) {
|
||
|
var modelChanges = model.changed;
|
||
|
|
||
|
if (_.isEmpty(modelChanges) || _.size(modelChanges) === 1 && model.changed.hasOwnProperty('selected')) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
this.trigger('onInputChanged', model);
|
||
|
}
|
||
|
});
|