From 454b21538917558cfb71c0b98bf49a1d8efa7eee Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Wed, 8 Mar 2017 15:49:52 +0100 Subject: [FIX] web: properly transfer field properties Before this commit, the field properties (attrs, fieldNames, fields) were not correctly given to sub views in many case expected: * use widget many2many on one2many field * create record when click on save in formDialog * do not send create command to the server * use the fields defined in the field node (instead of tree view fields) * use the fieldNames instead of the record to get field values --- .../web/static/src/js/views/basic/basic_model.js | 32 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) (limited to 'addons/web/static/src/js/views/basic/basic_model.js') diff --git a/addons/web/static/src/js/views/basic/basic_model.js b/addons/web/static/src/js/views/basic/basic_model.js index 8239692711e..992af62387e 100644 --- a/addons/web/static/src/js/views/basic/basic_model.js +++ b/addons/web/static/src/js/views/basic/basic_model.js @@ -302,6 +302,9 @@ var BasicModel = AbstractModel.extend({ for (var fieldName in element.data) { field = element.fields[fieldName]; + if (!field) { + continue; + } // get relational datapoint if (field.type === 'many2one') { @@ -842,18 +845,32 @@ var BasicModel = AbstractModel.extend({ }); }, /** - * Set and return the fieldattrs on a record element. + * Set fieldNames. + * Set fields on a record element (current fields as defaults) + * Set fieldattrs. * It is mostly useful for the cases where a record element is shared * between various views, such as a one2many with a tree and a form view. * * @param {string} recordID a valid element ID - * @param {Object} attrs the new field attrs - * @return {Object} the previous field attrs + * @param {Object} props + * @param {Object} props.fieldNames + * @param {Object} props.fields + * @param {Object} props.fieldAttrs + * @return {Object} + * @return {Object} result.fieldNames the previous field names + * @return {Object} result.fields the previous description fields + * @return {Object} result.fieldattrs the previous field attrs */ - setFieldAttrs: function (recordID, attrs) { + setFieldProps: function (recordID, props) { var record = this.localData[recordID]; - var result = record.fieldAttrs; - record.fieldAttrs = attrs; + var result = { + fieldNames: record.fieldNames, + fields: record.fields, + fieldAttrs: record.fieldAttrs, + }; + record.fieldNames = props.fieldNames; + record.fields = _.defaults(props.fields, record.fields); + record.fieldAttrs = props.fieldAttrs; return result; }, /** @@ -2100,6 +2117,9 @@ var BasicModel = AbstractModel.extend({ if (element.type === 'record') { for (var fieldName in element.data) { var field = element.fields[fieldName]; + if (!field) { + continue; + } if (_.contains(['one2many', 'many2one', 'many2many'], field.type)) { var relationalElement = this.localData[element.data[fieldName]]; -- cgit v1.2.3