cartodb/lib/assets/javascripts/dashboard/components/table/row-view.js
2020-06-15 10:58:47 +08:00

92 lines
2.0 KiB
JavaScript

const _ = require('underscore');
const CoreView = require('backbone/core-view');
module.exports = CoreView.extend({
tagName: 'tr',
initialize: function () {
this.model.bind('change', this.render, this);
this.model.bind('destroy', this.clean, this);
this.model.bind('remove', this.clean, this);
this.model.bind('change', this.triggerChange, this);
this.model.bind('sync', this.triggerSync, this);
this.model.bind('error', this.triggerError, this);
this.add_related_model(this.model);
this.order = this.options.order;
},
triggerChange: function () {
this.trigger('changeRow');
},
triggerSync: function () {
this.trigger('syncRow');
},
triggerError: function () {
this.trigger('errorRow');
},
valueView: function (colName, value) {
return value;
},
render: function () {
var self = this;
var row = this.model;
var tr = '';
var tdIndex = 0;
var td;
if (this.options.row_header) {
td = '<td class="rowHeader" data-x="' + tdIndex + '">';
} else {
td = '<td class="EmptyRowHeader" data-x="' + tdIndex + '">';
}
var v = self.valueView('', '');
if (v.html) {
v = v[0].outerHTML;
}
td += v;
td += '</td>';
tdIndex++;
tr += td;
var attrs = this.order || _.keys(row.attributes);
var tds = '';
var row_attrs = row.attributes;
for (var i = 0, len = attrs.length; i < len; ++i) {
var key = attrs[i];
var value = row_attrs[key];
if (value !== undefined) {
td = '<td id="cell_' + row.id + '_' + key + '" data-x="' + tdIndex + '">';
v = self.valueView(key, value);
if (v.html) {
v = v[0].outerHTML;
}
td += v;
td += '</td>';
tdIndex++;
tds += td;
}
}
tr += tds;
this.$el.html(tr).attr('id', 'row_' + row.id);
return this;
},
getCell: function (x) {
if (this.options.row_header) {
++x;
}
return this.$('td:eq(' + x + ')');
},
getTableView: function () {
return this.tableView;
}
});