diff options
| author | Xavier Morel <xmo@openerp.com> | 2011-10-13 14:44:35 +0200 |
|---|---|---|
| committer | Xavier Morel <xmo@openerp.com> | 2011-10-13 14:44:35 +0200 |
| commit | 88314e523a85ee2fcbfeedf84e8d4b3f9dedb51b (patch) | |
| tree | 33946d654f9b2ce178e93eef0caa85339e56fb60 /addons/web | |
| parent | 3580fb918da451a379c28d31839036c7735f53d8 (diff) | |
[FIX] excessive coherence between BufferedDataSet cache and to_write and to_create queues ~/projects/tiny/web/current
cache should hold readable values (so pairs for m2o fields), whereas
to_create and to_write hold the data which will be processed into o2m
commands and sent over the wire to create, write and context-value
calls. As a result, to_create and to_write should only have atomic ids
for m2o fields.
Therefore, only use fixed m2o values to store in read cache.
bzr revid: xmo@openerp.com-20111013124435-vbjolacjnc9f6qz4
Diffstat (limited to 'addons/web')
| -rw-r--r-- | addons/web/static/src/js/data.js | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/addons/web/static/src/js/data.js b/addons/web/static/src/js/data.js index a9c4319baa8..dd121ed9db7 100644 --- a/addons/web/static/src/js/data.js +++ b/addons/web/static/src/js/data.js @@ -680,14 +680,14 @@ openerp.web.BufferedDataSet = openerp.web.DataSetStatic.extend({ create: function(data, callback, error_callback) { var self = this; var prom = $.Deferred().then(callback); - this.fix_relational(data).then(function (fixed_data) { + this.fix_relational(data).then(function (fixed_m2o_data) { var cached = { id:_.uniqueId(self.virtual_id_prefix), - values: fixed_data, + values: fixed_m2o_data, defaults: self.last_default_get }; self.to_create.push(_.extend(_.clone(cached), { - values: _.clone(cached.values)})); + values: _.clone(data)})); self.cache.push(cached); self.on_change(); prom.resolve({result: cached.id}); @@ -697,21 +697,21 @@ openerp.web.BufferedDataSet = openerp.web.DataSetStatic.extend({ write: function (id, data, options, callback) { var self = this; var to_return = $.Deferred().then(callback); - this.fix_relational(data).then(function (fixed_data) { + this.fix_relational(data).then(function (fixed_m2o_data) { var record = _.detect(self.to_create, function(x) {return x.id === id;}); record = record || _.detect(self.to_write, function(x) {return x.id === id;}); var dirty = false; if (record) { - for (var k in fixed_data) { - if (record.values[k] === undefined || record.values[k] !== fixed_data[k]) { + for (var k in data) { + if (record.values[k] === undefined || record.values[k] !== data[k]) { dirty = true; break; } } - $.extend(record.values, fixed_data); + _.extend(record.values, data); } else { dirty = true; - record = {id: id, values: fixed_data}; + record = {id: id, values: data}; self.to_write.push(record); } var cached = _.detect(self.cache, function(x) {return x.id === id;}); @@ -719,7 +719,7 @@ openerp.web.BufferedDataSet = openerp.web.DataSetStatic.extend({ cached = {id: id, values: {}}; this.cache.push(cached); } - $.extend(cached.values, record.values); + _.extend(cached.values, fixed_m2o_data); if (dirty) self.on_change(); to_return.resolve({result: true}); |
