flectra/addons/web/static/src/js/views/standalone_field_manager_mixin.js
2018-01-16 02:34:37 -08:00

65 lines
2.0 KiB
JavaScript

flectra.define('web.StandaloneFieldManagerMixin', function (require) {
"use strict";
var FieldManagerMixin = require('web.FieldManagerMixin');
/**
* The StandaloneFieldManagerMixin is a mixin, designed to be used by a widget
* that instanciates its own field widgets.
*
* @mixin
* @name StandaloneFieldManagerMixin
* @mixes FieldManagerMixin
* @property {Function} _confirmChange
* @property {Function} _registerWidget
*/
var StandaloneFieldManagerMixin = _.extend({}, FieldManagerMixin, {
/**
* @override
*/
init: function () {
FieldManagerMixin.init.apply(this, arguments);
// registeredWidgets is a dict of all field widgets used by the widget
this.registeredWidgets = {};
},
//--------------------------------------------------------------------------
// Private
//--------------------------------------------------------------------------
/**
* This method will be called whenever a field value has changed (and has
* been confirmed by the model).
*
* @private
* @param {string} id basicModel Id for the changed record
* @param {string[]} fields the fields (names) that have been changed
* @param {FlectraEvent} event the event that triggered the change
* @returns {Deferred}
*/
_confirmChange: function (id, fields, event) {
var result = FieldManagerMixin._confirmChange.apply(this, arguments);
var record = this.model.get(id);
_.each(this.registeredWidgets[id], function (widget, fieldName) {
if (_.contains(fields, fieldName)) {
widget.reset(record, event);
}
});
return result;
},
_registerWidget: function (datapointID, fieldName, widget) {
if (!this.registeredWidgets[datapointID]) {
this.registeredWidgets[datapointID] = {};
}
this.registeredWidgets[datapointID][fieldName] = widget;
},
});
return StandaloneFieldManagerMixin;
});