summaryrefslogtreecommitdiff
path: root/addons/base/static/src/js
diff options
context:
space:
mode:
authorniv-openerp <nicolas.vanhoren@openerp.com>2011-06-23 14:21:10 +0200
committerniv-openerp <nicolas.vanhoren@openerp.com>2011-06-23 14:21:10 +0200
commit9eede2e3a42fcbea9590fdfacc48d895b76b9502 (patch)
treef4702ac95cc829b7f86c61509587a80961ee9c55 /addons/base/static/src/js
parent63d23036a353f2c52df108ec34ca36cbfd4aba8e (diff)
[fix] added setTimeout to all methods of o2m dataset to avoid lot of potential bugs in the views
bzr revid: nicolas.vanhoren@openerp.com-20110623122110-4cst4fm1dzup5z69
Diffstat (limited to 'addons/base/static/src/js')
-rw-r--r--addons/base/static/src/js/data.js2
-rw-r--r--addons/base/static/src/js/form.js23
2 files changed, 21 insertions, 4 deletions
diff --git a/addons/base/static/src/js/data.js b/addons/base/static/src/js/data.js
index 47e6d4fed3d..954eb8ccf43 100644
--- a/addons/base/static/src/js/data.js
+++ b/addons/base/static/src/js/data.js
@@ -357,6 +357,8 @@ openerp.base.DataSetStatic = openerp.base.DataSet.extend({
this.count = this.ids.length;
},
read_slice: function (fields, offset, limit, callback) {
+ var self = this;
+ offset = offset || 0;
var end_pos = limit && limit !== -1 ? offset + limit : undefined;
this.read_ids(this.ids.slice(offset, end_pos), fields, callback);
},
diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js
index 963798ffaab..a2ca5b42b20 100644
--- a/addons/base/static/src/js/form.js
+++ b/addons/base/static/src/js/form.js
@@ -1402,7 +1402,9 @@ openerp.base.form.One2ManyDataset = openerp.base.DataSetStatic.extend({
this.to_create.push(cached);
this.cache.push(cached);
this.on_change();
- return $.Deferred().then(callback).resolve({result: cached.id}).promise();
+ var to_return = $.Deferred().then(callback);
+ setTimeout(function() {to_return.resolve({result: cached.id});}, 0);
+ return to_return.promise();
},
write: function (id, data, callback) {
var record = _.select(this.to_create, function(x) {return x.id === id;});
@@ -1416,9 +1418,11 @@ openerp.base.form.One2ManyDataset = openerp.base.DataSetStatic.extend({
var cached = _.select(this.cache, function(x) {return x.id === id;});
$.extend(cached.value, record.values);
this.on_change();
- return $.Deferred().then(callback).resolve({result: true}).promise();
+ var to_return = $.Deferred().then(callback);
+ setTimeout(function () {to_return.resolve({result: true});}, 0);
+ return to_return.promise();
},
- unlink: function(ids) {
+ unlink: function(ids, callback, error_callback) {
var self = this;
var to_create_size = this.to_create.length;
var remove = function(list, to_remove) {
@@ -1432,6 +1436,9 @@ openerp.base.form.One2ManyDataset = openerp.base.DataSetStatic.extend({
_.each(ids, function(x) {self.to_delete.push({id:x})});
}
this.on_change();
+ var to_return = $.Deferred().then(callback);
+ setTimeout(function () {to_return.resolve({result: true});}, 0);
+ return to_return.promise();
},
reset_ids: function(ids) {
this.set_ids(ids);
@@ -1457,12 +1464,20 @@ openerp.base.form.One2ManyDataset = openerp.base.DataSetStatic.extend({
var completion = $.Deferred().then(callback);
var return_records = function() {
var records = _.map(ids, function(id) {return _.detect(self.cache, function(c) {return c.id === id;}).values;});
+ // avoid giving fields that were not asked for (+ create a copy of the cache)
+ records = _.map(records, function(record) {
+ var tmp = {};
+ _.each(fields, function(field) {
+ tmp[field] = record[field];
+ });
+ return tmp;
+ });
if (self.debug_mode) {
if (_.include(records, undefined)) {
throw "Record not correctly loaded";
}
}
- completion.resolve(records);
+ setTimeout(function () {completion.resolve(records);}, 0);
}
if(to_get.length > 0) {
var rpc_promise = this._super(to_get, fields, function(records) {