Odoo中文社区可以通过以下两个域名访问:shine-it.net , odoo.net.cn

由于系统升迁的原因,本论坛部分较早期的内容存在格式和链接损坏失效的问题,并非本论坛系统本身的缺陷,望谅解

本社区没有维护任何QQ群讨论组,任何与本社区同名的QQ群讨论组的言论与本社区无关!

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

odoo12 widget的用法



  • form_custom_registry没添加,这样写没法调起吧
    console.log("1") 只能表示这个js文件被加载了



  • @l732893879
    您好, 我在项目中全局搜索没有发现您提到的 form_custom_registry, 请问这个是12的吗



  • var registry = require('web.field_registry');
    然后对应注册添加:
    // Basic fields
    registry
        .add('abstract', AbstractField)
        .add('input', basic_fields.InputField)
        .add('integer', basic_fields.FieldInteger)
        .add('boolean', basic_fields.FieldBoolean)
        .add('date', basic_fields.FieldDate)
        .add('datetime', basic_fields.FieldDateTime)
        .add('domain', basic_fields.FieldDomain)
        .add('text', basic_fields.FieldText)
        .add('html', basic_fields.FieldText)
        .add('float', basic_fields.FieldFloat)
        .add('char', basic_fields.FieldChar)
        .add('link_button', basic_fields.LinkButton)
        .add('handle', basic_fields.HandleWidget)
        .add('email', basic_fields.FieldEmail)
        .add('phone', basic_fields.FieldPhone)
        .add('url', basic_fields.UrlWidget)
        .add('CopyClipboardText', basic_fields.TextCopyClipboard)
        .add('CopyClipboardChar', basic_fields.CharCopyClipboard)
        .add('image', basic_fields.FieldBinaryImage)
        .add('binary', basic_fields.FieldBinaryFile)
        .add('pdf_viewer', basic_fields.FieldPdfViewer)
        .add('monetary', basic_fields.FieldMonetary)
        .add('percentage', basic_fields.FieldPercentage)
        .add('priority', basic_fields.PriorityWidget)
        .add('attachment_image', basic_fields.AttachmentImage)
        .add('label_selection', basic_fields.LabelSelection)
        .add('state_selection', basic_fields.StateSelectionWidget)
        .add('kanban_state_selection', basic_fields.StateSelectionWidget)
        .add('boolean_favorite', basic_fields.FavoriteWidget)
        .add('boolean_button', basic_fields.FieldBooleanButton)
        .add('boolean_toggle', basic_fields.BooleanToggle)
        .add('statinfo', basic_fields.StatInfo)
        .add('percentpie', basic_fields.FieldPercentPie)
        .add('float_time', basic_fields.FieldFloatTime)
        .add('float_factor', basic_fields.FieldFloatFactor)
        .add('float_toggle', basic_fields.FieldFloatToggle)
        .add('progressbar', basic_fields.FieldProgressBar)
        .add('toggle_button', basic_fields.FieldToggleBoolean)
        .add('dashboard_graph', basic_fields.JournalDashboardGraph)
        .add('ace', basic_fields.AceEditor);
    


  • @las_aves sorry这是10的,可能到12换写法了



  • This post is deleted!


  • @鲍永道

    注册之后, field的name属性消失了

    odoo.define("account.upload_test", function(require){
    "use strict"
    
    require('web.dom_ready');
    var field_registry = require('web.field_registry');
    var basic_field = require('web.basic_fields');
    var Field_Text = basic_field.FieldText;
    
        var Imgs = Field_Text.extend({
            start : function(){
                var info = JSON.parse(this.value);
                console.log(info);
            },
        });
    
        field_registry.add('test_text', Imgs);
        return Imgs;
    });
    

    view code

    <field name="x_product_video" class="test_test" id="imageList" widget="test_text"/>
    

    加载之后的页面, name属性没有了, JS中的代码可以正常执行, 请问是哪一步有问题

    加载后渲染的代码

    <span class="o_field_text o_field_empty test_test" data-original-title="" title=""></span>
    


  • js代码写错了,你现在的写法只是用于调试,没有自己实现widget的逻辑,另外,extend的start的方法也不是你这么写的,后面需要return this._super();



  • @鲍永道
    谢谢, 按照您的方法我已经成功处理了错误代码。
    但当我在start方法里尝试用JQ.html() 方法向一个div中插入元素时并没有成功,尝试获取这个div也是空的

    start : function(){
                var videos = this.record.data.x_product_video;
                var arr = videos.split(";");
                var html = "";
                for(var i = 0; i < arr.length; i++){
                   //add html 
                    html += "";
    
                }
                $("#preview").html(html);
                console.log(document.getElementById("preview"));
                return this._super();
            },
    


  • 生命周期问题,还没有jq对象,所以不能html。



  • @鲍永道
    那么我应该如何正确的处理



  • 可以在其他方法里面写,也可以设置延时一下。



  • @鲍永道
    谢谢, 我最后用延时去处理了。
    不胜感激!



  • @las_aves不用客气,多交流。15068334016也可以加微信聊。


Log in to reply