cartodb/lib/assets/javascripts/builder/data/query-columns-collection.js
2020-06-15 10:58:47 +08:00

79 lines
1.9 KiB
JavaScript
Executable File

var Backbone = require('backbone');
var _ = require('underscore');
var QueryColumnModel = require('./query-column-model');
module.exports = Backbone.Collection.extend({
model: function (attrs, opts) {
var self = opts.collection;
return new QueryColumnModel(attrs, {
configModel: self._configModel,
tableName: self._tableName
});
},
url: function () {
if (this._tableName) {
var baseUrl = this._configModel.get('base_url');
var version = this._configModel.urlVersion('column');
return baseUrl + '/api/' + version + '/tables/' + this._tableName + '/columns';
}
return false;
},
initialize: function (models, opts) {
if (!opts.configModel) throw new Error('configModel is required');
if (!opts.querySchemaModel) throw new Error('querySchemaModel is required');
this._tableName = opts.tableName;
this._querySchemaModel = opts.querySchemaModel;
this._configModel = opts.configModel;
this._initBinds();
},
_initBinds: function () {
this.bind('add remove change:type change:name', function () {
this.reset();
this._querySchemaModel.set('status', 'unfetched');
this._querySchemaModel.fetch();
}, this);
this._querySchemaModel.bind('change:status', function (mdl, status) {
if (status === 'fetched') {
this.reset(this._querySchemaModel.columnsCollection.toJSON());
}
}, this);
},
setTableName: function (name) {
if (!name) return;
if (this._tableName) {
this._tableName = name;
this.each(function (columnModel) {
columnModel._tableName = name;
});
}
},
addColumn: function (opts) {
opts = opts || {};
this.create(
{
name: 'column_' + new Date().getTime(),
type: 'string',
isNew: true
},
_.extend(
opts,
{
wait: true,
parse: false
}
)
);
}
});