85 lines
2.4 KiB
JavaScript
Executable File
85 lines
2.4 KiB
JavaScript
Executable File
var CoreView = require('backbone/core-view');
|
|
var template = require('./edit-feature-action.tpl');
|
|
|
|
/**
|
|
* View representing the apply button for a form
|
|
*/
|
|
module.exports = CoreView.extend({
|
|
|
|
events: {
|
|
'click .js-save': '_onSaveClicked'
|
|
},
|
|
|
|
initialize: function (opts) {
|
|
if (!opts.featureModel) throw new Error('featureModel is required');
|
|
if (!opts.geometryFormModel) throw new Error('geometryFormModel is required');
|
|
if (!opts.attributesFormModel) throw new Error('attributesFormModel is required');
|
|
|
|
this._featureModel = opts.featureModel;
|
|
this._geometryFormModel = opts.geometryFormModel;
|
|
this._attributesFormModel = opts.attributesFormModel;
|
|
|
|
this._initBinds();
|
|
},
|
|
|
|
render: function () {
|
|
this.clearSubViews();
|
|
|
|
this.$el.html(template({
|
|
label: this._featureModel.isNew() ? _t('editor.edit-feature.add') : _t('editor.edit-feature.save'),
|
|
isDisabled: !this._canSave()
|
|
}));
|
|
|
|
return this;
|
|
},
|
|
|
|
_initBinds: function () {
|
|
this.model.on('change', this.render, this);
|
|
this._featureModel.on('change', function () {
|
|
this.model.set('hasChanges', true);
|
|
}, this);
|
|
this.add_related_model(this._featureModel);
|
|
this._geometryFormModel.bind('validate', function (isValid) {
|
|
this.model.set('isValidGeometry', !isValid);
|
|
}, this);
|
|
this.add_related_model(this._geometryFormModel);
|
|
this._attributesFormModel.bind('validate', function (isValid) {
|
|
this.model.set('isValidAttributes', !isValid);
|
|
}, this);
|
|
this.add_related_model(this._attributesFormModel);
|
|
},
|
|
|
|
_canSave: function () {
|
|
var hasChanges = this.model.get('hasChanges');
|
|
var isValidGeometry = this.model.get('isValidGeometry');
|
|
var isValidAttributes = this.model.get('isValidAttributes');
|
|
|
|
return isValidGeometry && isValidAttributes && hasChanges;
|
|
},
|
|
|
|
_onSaveClicked: function () {
|
|
if (this._canSave()) {
|
|
this._saveFeature();
|
|
}
|
|
},
|
|
|
|
_saveFeature: function () {
|
|
var self = this;
|
|
|
|
var operation = this._featureModel.isNew() ? 'add' : 'save';
|
|
var event = operation + 'Feature';
|
|
this._featureModel.trigger(event);
|
|
|
|
this._featureModel.save({
|
|
success: function () {
|
|
self._featureModel.trigger('saveFeatureSuccess', operation, self._featureModel);
|
|
self.model.set('hasChanges', false);
|
|
},
|
|
error: function () {
|
|
self._featureModel.trigger('saveFeatureFailed');
|
|
}
|
|
});
|
|
}
|
|
|
|
});
|