js/src/fields/FieldControlsCollection.js
//KB.Backbone.Common.FieldConfigsCollection
var FieldControlModel = require('./FieldControlModel');
module.exports = Backbone.Collection.extend({
initialize: function () {
this._byModule = {};
this._byArea = {};
this._linkedFields = [];
this.listenTo(this, 'add', this.addToModules);
this.listenTo(this, 'add', this.bindLinkedFields);
},
model: FieldControlModel,
addToModules: function (model) {
if (model.ModuleModel) {
var cid = model.ModuleModel.id;
if (!this._byModule[cid]) {
this._byModule[cid] = {};
}
if (model.ModuleModel.Area){
var areaid = model.ModuleModel.Area.id;
if (!this._byArea[areaid]){
this._byArea[areaid] = {};
}
this._byArea[areaid][model.id] = model;
}
this._byModule[cid][model.id] = model;
}
},
getFieldsforModule: function (id) {
if (this._byModule[id]) {
return this._byModule[id];
}
return {};
},
bindLinkedFields: function(model){
var lf = model.get('linkedFields');
_.each(lf, function(val, fid){
if (_.isNull(val)){
var xModel = this.get(fid);
if (xModel){
lf[fid] = xModel;
model.listenTo(xModel, 'external.change', model.externalUpdate);
this.bindLinkedFields(xModel);
}
}
},this);
},
updateModels: function (data) {
if (data) {
_.each(data, function (field) {
var model = this.get(field.uid);
if (model) {
model.trigger('field.model.settings', field);
} else {
this.add(field);
}
}, this);
}
}
});