diff --git a/addons/web/static/src/js/core.js b/addons/web/static/src/js/core.js index 6bac3fa39e6..887d57bd747 100644 --- a/addons/web/static/src/js/core.js +++ b/addons/web/static/src/js/core.js @@ -254,6 +254,7 @@ openerp.web.Registry = openerp.web.Class.extend( /** @lends openerp.web.Registry * @param {Object} mapping a mapping of keys to object-paths */ init: function (mapping) { + this.parent = null; this.map = mapping || {}; }, /** @@ -269,6 +270,9 @@ openerp.web.Registry = openerp.web.Class.extend( /** @lends openerp.web.Registry get_object: function (key, silent_error) { var path_string = this.map[key]; if (path_string === undefined) { + if (this.parent) { + return this.parent.get_object(key, silent_error); + } if (silent_error) { return void 'nooo'; } throw new openerp.web.KeyNotFound(key); } @@ -286,6 +290,21 @@ openerp.web.Registry = openerp.web.Class.extend( /** @lends openerp.web.Registry } return object_match; }, + /** + * Checks if the registry contains an object mapping for this key. + * + * @param {String} key key to look for + */ + contains: function (key) { + if (key === undefined) { return false; } + if (key in this.map) { + return true + } + if (this.parent) { + return this.parent.contains(key); + } + return false; + }, /** * Tries a number of keys, and returns the first object matching one of * the keys. @@ -299,7 +318,7 @@ openerp.web.Registry = openerp.web.Class.extend( /** @lends openerp.web.Registry get_any: function (keys) { for (var i=0; i - +