summaryrefslogtreecommitdiff
path: root/addons/web/static/src
diff options
context:
space:
mode:
authorGéry Debongnie <ged@odoo.com>2017-04-01 14:38:32 +0200
committerAaron Bohy <aab@odoo.com>2017-04-11 19:44:38 +0200
commit0f96189b7fbc481b21f0b7b7a2fdcb82916d6bae (patch)
treedcab5ac6540bf3e0ba0cb77853f496333e3a9084 /addons/web/static/src
parentcef1b273c06ba277c6d47a538c203872c4594898 (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')
-rw-r--r--addons/web/static/src/js/fields/relational_fields.js6
-rw-r--r--addons/web/static/src/js/views/list/list_editable_renderer.js12
-rw-r--r--addons/web/static/src/js/views/list/list_renderer.js1
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)