summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js
diff options
context:
space:
mode:
authorXavier Morel <xmo@openerp.com>2011-10-13 14:44:35 +0200
committerXavier Morel <xmo@openerp.com>2011-10-13 14:44:35 +0200
commit88314e523a85ee2fcbfeedf84e8d4b3f9dedb51b (patch)
tree33946d654f9b2ce178e93eef0caa85339e56fb60 /addons/web/static/src/js
parent3580fb918da451a379c28d31839036c7735f53d8 (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/static/src/js')
-rw-r--r--addons/web/static/src/js/data.js18
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});