summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/data.js
diff options
context:
space:
mode:
authorJiten (OpenERP) <jra@tinyerp.com>2011-10-12 14:39:58 +0530
committerJiten (OpenERP) <jra@tinyerp.com>2011-10-12 14:39:58 +0530
commitd7933e221113110f6e2cf97041f711c7a3cede1d (patch)
treeb45e46d834307bab66ad4ad0381407556793afea /addons/web/static/src/js/data.js
parent77ad674798fbb82c364a82341763614aaede686d (diff)
parent048cfa7804759c6b3fb952983451165fb319bc80 (diff)
[Merge] merge from openerp-web.
bzr revid: jra@tinyerp.com-20111012090958-3c5xp3e8viplb84f
Diffstat (limited to 'addons/web/static/src/js/data.js')
-rw-r--r--addons/web/static/src/js/data.js48
1 files changed, 38 insertions, 10 deletions
diff --git a/addons/web/static/src/js/data.js b/addons/web/static/src/js/data.js
index fcf6a65dcf5..ea0824fb1df 100644
--- a/addons/web/static/src/js/data.js
+++ b/addons/web/static/src/js/data.js
@@ -613,11 +613,11 @@ openerp.web.BufferedDataSet = openerp.web.DataSetStatic.extend({
create: function(data, callback, error_callback) {
var cached = {id:_.uniqueId(this.virtual_id_prefix), values: data,
defaults: this.last_default_get};
- this.to_create.push(cached);
+ this.to_create.push(_.extend(_.clone(cached), {values: _.clone(cached.values)}));
this.cache.push(cached);
this.on_change();
var prom = $.Deferred().then(callback);
- setTimeout(function() {prom.resolve({result: cached.id});}, 0);
+ prom.resolve({result: cached.id});
return prom.promise();
},
write: function (id, data, options, callback) {
@@ -639,6 +639,10 @@ openerp.web.BufferedDataSet = openerp.web.DataSetStatic.extend({
self.to_write.push(record);
}
var cached = _.detect(this.cache, function(x) {return x.id === id;});
+ if (!cached) {
+ cached = {id: id, values: {}};
+ this.cache.push(cached);
+ }
$.extend(cached.values, record.values);
if (dirty)
this.on_change();
@@ -695,7 +699,7 @@ openerp.web.BufferedDataSet = openerp.web.DataSetStatic.extend({
throw "Record not correctly loaded";
}
}
- setTimeout(function () {completion.resolve(records);}, 0);
+ completion.resolve(records);
};
if(to_get.length > 0) {
var rpc_promise = this._super(to_get, fields, function(records) {
@@ -720,27 +724,51 @@ openerp.web.BufferedDataSet = openerp.web.DataSetStatic.extend({
});
openerp.web.BufferedDataSet.virtual_id_regex = /^one2many_v_id_.*$/;
-openerp.web.ReadOnlyDataSetSearch = openerp.web.DataSetSearch.extend({
+openerp.web.ProxyDataSet = openerp.web.DataSetSearch.extend({
+ init: function() {
+ this._super.apply(this, arguments);
+ this.create_function = null;
+ this.write_function = null;
+ this.read_function = null;
+ },
+ read_ids: function () {
+ if (this.read_function) {
+ return this.read_function.apply(null, arguments);
+ } else {
+ return this._super.apply(this, arguments);
+ }
+ },
default_get: function(fields, callback) {
return this._super(fields, callback).then(this.on_default_get);
},
on_default_get: function(result) {},
create: function(data, callback, error_callback) {
this.on_create(data);
- var to_return = $.Deferred().then(callback);
- setTimeout(function () {to_return.resolve({"result": undefined});}, 0);
- return to_return.promise();
+ if (this.create_function) {
+ return this.create_function(data, callback, error_callback);
+ } else {
+ console.warn("trying to create a record using default proxy dataset behavior");
+ var to_return = $.Deferred().then(callback);
+ setTimeout(function () {to_return.resolve({"result": undefined});}, 0);
+ return to_return.promise();
+ }
},
on_create: function(data) {},
write: function (id, data, options, callback) {
this.on_write(id, data);
- var to_return = $.Deferred().then(callback);
- setTimeout(function () {to_return.resolve({"result": true});}, 0);
- return to_return.promise();
+ if (this.write_function) {
+ return this.write_function(id, data, options, callback);
+ } else {
+ console.warn("trying to write a record using default proxy dataset behavior");
+ var to_return = $.Deferred().then(callback);
+ setTimeout(function () {to_return.resolve({"result": true});}, 0);
+ return to_return.promise();
+ }
},
on_write: function(id, data) {},
unlink: function(ids, callback, error_callback) {
this.on_unlink(ids);
+ console.warn("trying to unlink a record using default proxy dataset behavior");
var to_return = $.Deferred().then(callback);
setTimeout(function () {to_return.resolve({"result": true});}, 0);
return to_return.promise();