summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/fields
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2017-10-25 14:57:24 +0200
committerChristophe Simonis <chs@odoo.com>2017-10-25 14:57:24 +0200
commit693f8dc68add34663f798370b4aea305f573f16d (patch)
treedbd47871d9412317dc96fd4ba349196badab199c /addons/web/static/src/js/fields
parentc7a6409fac80a2d33006ab56fe40d27f2acd2cfd (diff)
parent7bfde6e05d12be959d04f4842237bfcc05f3c93f (diff)
[MERGE] forward port branch saas-16 up to 7bfde6e05d1
Diffstat (limited to 'addons/web/static/src/js/fields')
-rw-r--r--addons/web/static/src/js/fields/abstract_field.js3
-rw-r--r--addons/web/static/src/js/fields/basic_fields.js2
-rw-r--r--addons/web/static/src/js/fields/relational_fields.js16
3 files changed, 18 insertions, 3 deletions
diff --git a/addons/web/static/src/js/fields/abstract_field.js b/addons/web/static/src/js/fields/abstract_field.js
index cef45c2a976..fc29ba77466 100644
--- a/addons/web/static/src/js/fields/abstract_field.js
+++ b/addons/web/static/src/js/fields/abstract_field.js
@@ -391,6 +391,8 @@ var AbstractField = Widget.extend({
* Please do not use this flag unless you really need it. Our only use
* case is currently the pad widget, which does a _setValue in the
* renderEdit method.
+ * @param {boolean} [options.notifyChange=true] if false, the basic model
+ * will not notify and not trigger the onchange, even though it was changed.
* @param {boolean} [options.forceChange=false] if true, the change event will be
* triggered even if the new value is the same as the old one
* @returns {Deferred}
@@ -421,6 +423,7 @@ var AbstractField = Widget.extend({
changes: changes,
viewType: this.viewType,
doNotSetDirty: options && options.doNotSetDirty,
+ notifyChange: !options || options.notifyChange !== false,
onSuccess: def.resolve.bind(def),
onFailure: def.reject.bind(def),
});
diff --git a/addons/web/static/src/js/fields/basic_fields.js b/addons/web/static/src/js/fields/basic_fields.js
index 8eae8f5b8f1..549b2e256be 100644
--- a/addons/web/static/src/js/fields/basic_fields.js
+++ b/addons/web/static/src/js/fields/basic_fields.js
@@ -205,7 +205,7 @@ var InputField = DebouncedField.extend({
if (!event || event === this.lastChangeEvent) {
this.isDirty = false;
}
- if (this.isDirty || (event && event.target === this)) {
+ if (this.isDirty || (event && event.target === this && event.data.changes[this.name] === this.value)) {
return $.when();
} else {
return this._render();
diff --git a/addons/web/static/src/js/fields/relational_fields.js b/addons/web/static/src/js/fields/relational_fields.js
index c4422285ae7..f2cacb3327f 100644
--- a/addons/web/static/src/js/fields/relational_fields.js
+++ b/addons/web/static/src/js/fields/relational_fields.js
@@ -1033,13 +1033,25 @@ var FieldX2Many = AbstractField.extend({
*/
_onResequence: function (event) {
var self = this;
- _.each(event.data.rowIDs, function (rowID, index) {
+ var rowIDs = event.data.rowIDs.slice();
+ var rowID = rowIDs.pop();
+ var defs = _.map(rowIDs, function (rowID, index) {
var data = {};
data[event.data.handleField] = event.data.offset + index;
- self._setValue({
+ return self._setValue({
operation: 'UPDATE',
id: rowID,
data: data,
+ }, {
+ notifyChange: false,
+ });
+ });
+ $.when.apply($, defs).then(function () {
+ // trigger only once the onchange for parent record
+ self._setValue({
+ operation: 'UPDATE',
+ id: rowID,
+ data: _.object([event.data.handleField], [event.data.offset + rowIDs.length]),
});
});
},