diff options
Diffstat (limited to 'addons/web/static/src/js/views/basic')
| -rw-r--r-- | addons/web/static/src/js/views/basic/basic_model.js | 32 | ||||
| -rw-r--r-- | addons/web/static/src/js/views/basic/basic_renderer.js | 16 |
2 files changed, 36 insertions, 12 deletions
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]]; diff --git a/addons/web/static/src/js/views/basic/basic_renderer.js b/addons/web/static/src/js/views/basic/basic_renderer.js index 22ec34f714b..e581b222417 100644 --- a/addons/web/static/src/js/views/basic/basic_renderer.js +++ b/addons/web/static/src/js/views/basic/basic_renderer.js @@ -63,24 +63,28 @@ return AbstractRenderer.extend({ * @returns {Object} */ _getFieldValues: function (record) { - return _.mapObject(record.data, function (value, name) { + var result = {}; + _.each(record.fieldNames, function (name) { var field = record.fields[name]; + var value = record.data[name]; + result[name] = value; if (field.type === 'many2one') { - return value.data ? value.data.id || false : false; + result[name] = value.data ? value.data.id || false : false; } if (field.type === 'one2many' || field.type === 'many2many') { if (value) { - return _.pluck(value.data, 'res_id'); + result[name] = _.pluck(value.data, 'res_id'); } else { - return []; + result[name] = []; } } if (field.type === 'boolean') { // we want an explicit false value, not null if it is unset - return value || false; + result[name] = value || false; } - return value; }); + result.id = record.data.id; + return result; }, /** * Render the view |
