diff options
| author | Géry Debongnie <ged@odoo.com> | 2017-04-01 14:38:32 +0200 |
|---|---|---|
| committer | Aaron Bohy <aab@odoo.com> | 2017-04-11 19:44:38 +0200 |
| commit | 0f96189b7fbc481b21f0b7b7a2fdcb82916d6bae (patch) | |
| tree | dcab5ac6540bf3e0ba0cb77853f496333e3a9084 /addons/web/static/src | |
| parent | cef1b273c06ba277c6d47a538c203872c4594898 (diff) | |
[FIX] web: update all fields in onchange in one2many
Before this commit, we did not properly update all fields in a one2many.
I assume that it was because the list renderer crashed if it tried to
display a field that did not exist in the list view, but in that case,
we simply can ignore these fields.
Diffstat (limited to 'addons/web/static/src')
3 files changed, 13 insertions, 6 deletions
diff --git a/addons/web/static/src/js/fields/relational_fields.js b/addons/web/static/src/js/fields/relational_fields.js index e4ea88db789..c29f958cc06 100644 --- a/addons/web/static/src/js/fields/relational_fields.js +++ b/addons/web/static/src/js/fields/relational_fields.js @@ -746,9 +746,9 @@ var FieldOne2Many = FieldX2Many.extend({ if (event && event.target === this && self.view.arch.tag === 'tree' && this.editable) { var command = event.data.changes[this.name]; if (command.operation === 'UPDATE') { - var fieldsChanged = _.keys(command.data); - // FIXME: other fields might have change with onchange - this.renderer.confirmChange(record.data[this.name], command.id, fieldsChanged); + var state = record.data[this.name]; + var fieldNames = state.getFieldNames(); + this.renderer.confirmChange(state, command.id, fieldNames); return $.when(); } } diff --git a/addons/web/static/src/js/views/list/list_editable_renderer.js b/addons/web/static/src/js/views/list/list_editable_renderer.js index 1c1ea35acf2..337d62b1dc1 100644 --- a/addons/web/static/src/js/views/list/list_editable_renderer.js +++ b/addons/web/static/src/js/views/list/list_editable_renderer.js @@ -423,13 +423,19 @@ ListRenderer.include({ * Updates the row of a particular record of the editable list view. * * @param {index} index the index of the record whose row needs updating - * @param {string[]} changed_fields names of the fields which changed + * @param {string[]} changedFields names of the fields which changed * @param {OdooEvent} event the event that triggered the change */ - _updateRow: function (index, changed_fields, event) { + _updateRow: function (index, changedFields, event) { var self = this; var record = this.state.data[index]; - _.each(changed_fields, function (field_name) { + + // filter out fields that are not present in the view. They may come + // from an onchange, but we need to ignore them. + changedFields = _.filter(changedFields, function (fieldName) { + return _.findWhere(self.columns, {name: fieldName}); + }); + _.each(changedFields, function (field_name) { var widget = _.findWhere(self.widgets, {name: field_name}); if (widget && widget.__rowIndex === index) { widget.reset(record, event); diff --git a/addons/web/static/src/js/views/list/list_renderer.js b/addons/web/static/src/js/views/list/list_renderer.js index ad364951815..8cfb9ced65b 100644 --- a/addons/web/static/src/js/views/list/list_renderer.js +++ b/addons/web/static/src/js/views/list/list_renderer.js @@ -62,6 +62,7 @@ var ListRenderer = BasicRenderer.extend({ if (c.attrs.widget === 'handle') { self.hasHandle = true; } + c.name = c.attrs.name; return false; }); this.rowDecorations = _.chain(this.arch.attrs) |
