diff options
| author | Christophe Simonis <chs@odoo.com> | 2016-10-27 18:23:44 +0200 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2016-10-27 18:23:44 +0200 |
| commit | ea479ce6f3ffdcf36c5f918b6ce68888e42a56ce (patch) | |
| tree | addf64e3f038bf53c293cc7ba1e81fd0b9413b32 /addons/web/static | |
| parent | 68b1c5c1fa643e99fd5e597949c39e222477dcab (diff) | |
| parent | 3bb022d57c43c51a5fd4be39e4123b1206db4782 (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.js | 11 | ||||
| -rw-r--r-- | addons/web/static/src/js/views/list_view.js | 7 | ||||
| -rw-r--r-- | addons/web/static/test/list-editable.js | 21 | ||||
| -rw-r--r-- | addons/web/static/test/list.js | 6 |
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({ |
