summaryrefslogtreecommitdiff
path: root/addons/web/static
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2016-10-27 18:23:44 +0200
committerChristophe Simonis <chs@odoo.com>2016-10-27 18:23:44 +0200
commitea479ce6f3ffdcf36c5f918b6ce68888e42a56ce (patch)
treeaddf64e3f038bf53c293cc7ba1e81fd0b9413b32 /addons/web/static
parent68b1c5c1fa643e99fd5e597949c39e222477dcab (diff)
parent3bb022d57c43c51a5fd4be39e4123b1206db4782 (diff)
[MERGE] forward port branch 10.0 up to 3bb022d
Diffstat (limited to 'addons/web/static')
-rw-r--r--addons/web/static/src/js/framework/data.js11
-rw-r--r--addons/web/static/src/js/views/list_view.js7
-rw-r--r--addons/web/static/test/list-editable.js21
-rw-r--r--addons/web/static/test/list.js6
4 files changed, 35 insertions, 10 deletions
diff --git a/addons/web/static/src/js/framework/data.js b/addons/web/static/src/js/framework/data.js
index a350dadb59e..c160ebaf539 100644
--- a/addons/web/static/src/js/framework/data.js
+++ b/addons/web/static/src/js/framework/data.js
@@ -793,18 +793,19 @@ var BufferedDataSet = DataSetStatic.extend({
var def = $.Deferred();
this.mutex.exec(function () {
var dirty = false;
- _.each(data, function (v, k) {
- if (!_.isEqual(v, cached.values[k])) {
+ // _.each is broken if a field "length" is present
+ for (var k in data) {
+ if (!_.isEqual(data[k], cached.values[k])) {
dirty = true;
- if (_.isEqual(v, cached.from_read[k])) { // clean changes
+ if (_.isEqual(data[k], cached.from_read[k])) { // clean changes
delete cached.changes[k];
} else {
- cached.changes[k] = v;
+ cached.changes[k] = data[k];
}
} else {
delete data[k];
}
- });
+ }
self._update_cache(id, options);
if (dirty) {
diff --git a/addons/web/static/src/js/views/list_view.js b/addons/web/static/src/js/views/list_view.js
index 54ee12f684a..cdf2ff18c63 100644
--- a/addons/web/static/src/js/views/list_view.js
+++ b/addons/web/static/src/js/views/list_view.js
@@ -470,11 +470,12 @@ var ListView = View.extend({
self.records.remove(record);
return;
}
- _.each(values, function (value, key) {
+ // _.each is broken if a field "length" is present
+ for (var key in values) {
if (fields[key] && fields[key].type === 'many2many')
record.set(key + '__display', false, {silent: true});
- record.set(key, value, {silent: true});
- });
+ record.set(key, values[key], {silent: true});
+ }
record.trigger('change', record);
/* When a record is reloaded, there is a rendering lag because of the addition/suppression of
diff --git a/addons/web/static/test/list-editable.js b/addons/web/static/test/list-editable.js
index be2acdb1365..4b88d9f06e5 100644
--- a/addons/web/static/test/list-editable.js
+++ b/addons/web/static/test/list-editable.js
@@ -196,6 +196,13 @@ odoo.define_section('list.edition', ['web.data', 'web.ListView', 'web.data_manag
mock.add('demo:onchange', function () {
return {};
});
+ mock.add('demo:fields_get', function () {
+ return {
+ a: {type: 'char', string: "A"},
+ b: {type: 'char', string: "B"},
+ c: {type: 'char', string: "C"}
+ };
+ });
}
test('newrecord', function (assert, data, ListView, data_manager) {
@@ -263,6 +270,13 @@ odoo.define_section('list.edition.events', ['web.data', 'web.ListView', 'web.dat
mock.add('demo:read', function () {
return [{ id: 1, a: 'foo', b: 'bar', c: 'baz' }];
});
+ mock.add('demo:fields_get', function () {
+ return {
+ a: {type: 'char', string: "A"},
+ b: {type: 'char', string: "B"},
+ c: {type: 'char', string: "C"}
+ };
+ });
}
test('edition events',function (assert, data, ListView, data_manager) {
@@ -345,6 +359,13 @@ odoo.define_section('list.edition.onwrite', ['web.data', 'web.ListView', 'web.da
mock.add('demo:default_get', function () { return {}; });
mock.add('demo:create', function () { return 1; });
mock.add('demo:on_write', function () { return [42]; });
+ mock.add('demo:fields_get', function () {
+ return {
+ a: {type: 'char', string: "A"},
+ b: {type: 'char', string: "B"},
+ c: {type: 'char', string: "C"}
+ };
+ });
var ds = new data.DataSetStatic(null, 'demo', null, []);
var fields_view = data_manager._postprocess_fvg({
diff --git a/addons/web/static/test/list.js b/addons/web/static/test/list.js
index 9d1d1b9ec7d..49adabba13d 100644
--- a/addons/web/static/test/list.js
+++ b/addons/web/static/test/list.js
@@ -2,7 +2,7 @@ odoo.define_section('list.buttons', ['web.ListView', 'web.data', 'web.data_manag
test('record-deletion', function (assert, ListView, data, data_manager) {
assert.expect(2);
-
+
mock.add('demo:read', function (args, kwargs) {
if (_.isEqual(args[0], [1, 2, 3])) {
return [
@@ -18,7 +18,9 @@ odoo.define_section('list.buttons', ['web.ListView', 'web.data', 'web.data_manag
throw new Error(JSON.stringify(_.toArray(arguments)));
});
mock.add('/web/dataset/call_button', function () { return false; });
-
+ mock.add('demo:fields_get', function() {
+ return {a: {type: 'char', string: "A"}};
+ });
var ds = new data.DataSetStatic(null, 'demo', null, [1, 2, 3]);
var fields_view = data_manager._postprocess_fvg({