[IMP] have registries remain linked so alterations to a parent registry alters its clone as well (if keys are not overwritten in the child)
bzr revid: xmo@openerp.com-20120208124309-iho04vgae2nz6xix
This commit is contained in:
parent
69fdc31167
commit
ff570e8d23
|
@ -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
|
* @param {Object} mapping a mapping of keys to object-paths
|
||||||
*/
|
*/
|
||||||
init: function (mapping) {
|
init: function (mapping) {
|
||||||
|
this.parent = null;
|
||||||
this.map = mapping || {};
|
this.map = mapping || {};
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
|
@ -269,6 +270,9 @@ openerp.web.Registry = openerp.web.Class.extend( /** @lends openerp.web.Registry
|
||||||
get_object: function (key, silent_error) {
|
get_object: function (key, silent_error) {
|
||||||
var path_string = this.map[key];
|
var path_string = this.map[key];
|
||||||
if (path_string === undefined) {
|
if (path_string === undefined) {
|
||||||
|
if (this.parent) {
|
||||||
|
return this.parent.get_object(key, silent_error);
|
||||||
|
}
|
||||||
if (silent_error) { return void 'nooo'; }
|
if (silent_error) { return void 'nooo'; }
|
||||||
throw new openerp.web.KeyNotFound(key);
|
throw new openerp.web.KeyNotFound(key);
|
||||||
}
|
}
|
||||||
|
@ -327,8 +331,9 @@ openerp.web.Registry = openerp.web.Class.extend( /** @lends openerp.web.Registry
|
||||||
* @param {Object} [mapping={}] a mapping of keys to object-paths
|
* @param {Object} [mapping={}] a mapping of keys to object-paths
|
||||||
*/
|
*/
|
||||||
clone: function (mapping) {
|
clone: function (mapping) {
|
||||||
return new openerp.web.Registry(
|
var child = new openerp.web.Registry(mapping);
|
||||||
_.extend({}, this.map, mapping || {}));
|
child.parent = this;
|
||||||
|
return child;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@ $(document).ready(function () {
|
||||||
window.openerp.web.core(openerp);
|
window.openerp.web.core(openerp);
|
||||||
openerp.web.Foo = {};
|
openerp.web.Foo = {};
|
||||||
openerp.web.Bar = {};
|
openerp.web.Bar = {};
|
||||||
|
openerp.web.Foo2 = {};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
test('key fetch', function () {
|
test('key fetch', function () {
|
||||||
|
@ -30,4 +31,25 @@ $(document).ready(function () {
|
||||||
.add('bar', 'openerp.web.Bar');
|
.add('bar', 'openerp.web.Bar');
|
||||||
strictEqual(reg.get_object('bar'), openerp.web.Bar);
|
strictEqual(reg.get_object('bar'), openerp.web.Bar);
|
||||||
});
|
});
|
||||||
|
test('extension', function () {
|
||||||
|
var reg = new openerp.web.Registry({
|
||||||
|
foo: 'openerp.web.Foo',
|
||||||
|
bar: 'openerp.web.Bar'
|
||||||
|
});
|
||||||
|
|
||||||
|
var reg2 = reg.clone({ 'foo': 'openerp.web.Foo2' });
|
||||||
|
strictEqual(reg.get_object('foo'), openerp.web.Foo);
|
||||||
|
strictEqual(reg2.get_object('foo'), openerp.web.Foo2);
|
||||||
|
});
|
||||||
|
test('remain-linked', function () {
|
||||||
|
var reg = new openerp.web.Registry({
|
||||||
|
foo: 'openerp.web.Foo',
|
||||||
|
bar: 'openerp.web.Bar'
|
||||||
|
});
|
||||||
|
|
||||||
|
var reg2 = reg.clone();
|
||||||
|
reg.add('foo2', 'openerp.web.Foo2');
|
||||||
|
strictEqual(reg.get_object('foo2'), openerp.web.Foo2);
|
||||||
|
strictEqual(reg2.get_object('foo2'), openerp.web.Foo2);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue