试着来回答:“还有 widgets注册的方式 都是什么意思 ”
这是在core.js文件web.core module中return 部分, new Registry()作用是 初始化注册器类和她的map属性,用来登记系统的widgets, map={键值对 } || null。Registry类还有get()和add()等方法。
作用是:当我们在其他module中创建新的widget,注册widget就是往Registry类的map写键值对。e.g: 如web.form_widgets模块中,可以看到一行core.form_widget_registry.add( 'char', FieldChar ), 实质上就是往注册器map中添加键值对{..., 'char': FieldChar, ....},告知系统有个叫FieldChar的widget类。当需要继承Fieldchar时,就可以用代码core.form_widget_registry.get('char') 来获取他的widget类。
列举一段代码来说明(顺便说一下:第一个问题应该也可以用这个原理来实现, 没试过):
var core = require('web.core');
form_widget_registry= core.form_widget_registry
var FieldChar = form_widget_registry.get('char');
var MyFieldChar = FieldChar.extend({
template: 'MyTemplate' // my custom template
// overriding ........ if you have
});
// register widget
form_widget_registry.add('my_char', MyFieldChar);