diff options
Diffstat (limited to 'addons/web/static/src/js/data.js')
| -rw-r--r-- | addons/web/static/src/js/data.js | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/addons/web/static/src/js/data.js b/addons/web/static/src/js/data.js index 3797121756f..4b4523a2723 100644 --- a/addons/web/static/src/js/data.js +++ b/addons/web/static/src/js/data.js @@ -737,6 +737,50 @@ openerp.web.ReadOnlyDataSetSearch = openerp.web.DataSetSearch.extend({ on_unlink: function(ids) {} }); +openerp.web.Model = openerp.web.SessionAware.extend({ + init: function(session, model_name) { + this._super(session); + this.model_name = model_name; + }, + get_func: function(method_name) { + var self = this; + return function() { + if (method_name == "search_read") + return self._search_read.apply(self, arguments); + return self._call(method_name, _.toArray(arguments)); + }; + }, + _call: function (method, args) { + return this.rpc('/web/dataset/call', { + model: this.model_name, + method: method, + args: args + }).pipe(function(result) { + if (method == "read" && result instanceof Array && result.length > 0 && result[0]["id"]) { + var index = {}; + _.each(_.range(result.length), function(i) { + index[result[i]["id"]] = result[i]; + }) + result = _.map(args[0], function(x) {return index[x];}); + } + return result; + }); + }, + _search_read: function(domain, fields, offset, limit, order, context) { + return this.rpc('/web/dataset/search_read', { + model: this.model_name, + fields: fields, + offset: offset, + limit: limit, + domain: domain, + sort: order, + context: context + }).pipe(function(result) { + return result.records; + });; + } +}); + openerp.web.CompoundContext = openerp.web.Class.extend({ init: function () { this.__ref = "compound_context"; |
