复制一个widgets 改个名字 自己调用 , 如何实现?? 各种widgets 类型什么意思??



  • 这是 多对多 形式的展现方式 我想新增一个
    core.form_widget_registry.add('many2many_kanban_my', FieldMany2ManyKanban1);
    实现的方式跟 原生的大体一样 我修改了一个文件
    .add('many2many_kanban', FieldMany2ManyKanban)

    0_1498809338532_001.png

    还有 widgets注册的方式 都是什么意思 如下图:
    0_1498809404230_002.png



  • @like_odoo

    试着来回答:“还有 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);



    1. 先分清楚widget是在form上显示还是在list 上显示

    2. extend 基类widget

    3. 根据自己的业务逻辑重写方法

    4. 注册自己写的widget



  • 例子上可以参考:

    odoo form view pic url widget

    https://renjie.me/2016/09/10/odoo-form-view-pic-url-widget/


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待