跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • 浅色
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • 深色
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Flatly)
  • 不使用皮肤
折叠

Odoo 中文社区

  1. 主页
  2. 版块
  3. Odoo 开发与实施交流
  4. odoo12 widget的用法

odoo12 widget的用法

已定时 已固定 已锁定 已移动 Odoo 开发与实施交流
16 帖子 4 发布者 6.5k 浏览 4 关注中
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • L 离线
    L 离线
    las_aves
    发表于 最后由 编辑
    #1

    我在字段中存了一个URL拼接成的字符串, 如 图片URL1;图片URL2;图片URL3
    现在想在前端将字符串按符号分割并且将图片展示出来, 有人告诉我写widget, 然后我做了一个小demo发现start方法不执行, 想请教各位大神是什么原因

    JS

    odoo.define("web.upload_test", function(require){
    "use strict"
    
    require('web.dom_ready');
    var core = require('web.core');
    var widgetRegistry = require('web.widget_registry');
    var Widget = require('web.Widget');
        console.log("1");
        var Imgs = Widget.extend({
            template : 'upload_test',
            init : function(){
                console.log("2");
            },
            start : function(){
                console.log("3");
            },
        });
        return Imgs;
    });
    

    其中, console.log("1") 是已执行的代码, 令我困惑的是为什么start, init 不执行

    视图 部分代码

    <div><t t-name="upload_test"></t></div>
    

    请各位大神指点,谢谢

    H 1 条回复 最后回复
    0
    • L las_aves

      我在字段中存了一个URL拼接成的字符串, 如 图片URL1;图片URL2;图片URL3
      现在想在前端将字符串按符号分割并且将图片展示出来, 有人告诉我写widget, 然后我做了一个小demo发现start方法不执行, 想请教各位大神是什么原因

      JS

      odoo.define("web.upload_test", function(require){
      "use strict"
      
      require('web.dom_ready');
      var core = require('web.core');
      var widgetRegistry = require('web.widget_registry');
      var Widget = require('web.Widget');
          console.log("1");
          var Imgs = Widget.extend({
              template : 'upload_test',
              init : function(){
                  console.log("2");
              },
              start : function(){
                  console.log("3");
              },
          });
          return Imgs;
      });
      

      其中, console.log("1") 是已执行的代码, 令我困惑的是为什么start, init 不执行

      视图 部分代码

      <div><t t-name="upload_test"></t></div>
      

      请各位大神指点,谢谢

      H 离线
      H 离线
      hui
      发表于 最后由 编辑
      #2

      @las_aves

      继承的widget,是不是这个是必须的啊(我也不是很懂)

      init: function(parent) {
                  this._super.apply(this, arguments); 
              },
      
      
      1 条回复 最后回复
      0
      • L 离线
        L 离线
        las_aves
        发表于 最后由 编辑
        #3
        此主題已被删除!
        1 条回复 最后回复
        0
        • L 离线
          L 离线
          l732893879
          发表于 最后由 编辑
          #4

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

          L 1 条回复 最后回复
          0
          • L l732893879

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

            L 离线
            L 离线
            las_aves
            发表于 最后由 编辑
            #5

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

            L 1 条回复 最后回复
            0
            • 鲍 离线
              鲍 离线
              鲍永道
              发表于 最后由 编辑
              #6
              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);
              
              L 2 条回复 最后回复
              0
              • L las_aves

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

                L 离线
                L 离线
                l732893879
                发表于 最后由 编辑
                #7

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

                1 条回复 最后回复
                0
                • 鲍 鲍永道
                  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);
                  
                  L 离线
                  L 离线
                  las_aves
                  发表于 最后由 编辑
                  #8
                  此主題已被删除!
                  1 条回复 最后回复
                  0
                  • 鲍 鲍永道
                    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);
                    
                    L 离线
                    L 离线
                    las_aves
                    发表于 最后由 编辑
                    #9

                    @鲍永道

                    注册之后, 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>
                    
                    1 条回复 最后回复
                    0
                    • 鲍 离线
                      鲍 离线
                      鲍永道
                      发表于 最后由 编辑
                      #10

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

                      L 1 条回复 最后回复
                      0
                      • 鲍 鲍永道

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

                        L 离线
                        L 离线
                        las_aves
                        发表于 最后由 编辑
                        #11

                        @鲍永道
                        谢谢, 按照您的方法我已经成功处理了错误代码。
                        但当我在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();
                                },
                        
                        1 条回复 最后回复
                        0
                        • 鲍 离线
                          鲍 离线
                          鲍永道
                          发表于 最后由 编辑
                          #12

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

                          L 1 条回复 最后回复
                          0
                          • 鲍 鲍永道

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

                            L 离线
                            L 离线
                            las_aves
                            发表于 最后由 编辑
                            #13

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

                            1 条回复 最后回复
                            0
                            • 鲍 离线
                              鲍 离线
                              鲍永道
                              发表于 最后由 编辑
                              #14

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

                              L 1 条回复 最后回复
                              0
                              • 鲍 鲍永道

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

                                L 离线
                                L 离线
                                las_aves
                                发表于 最后由 编辑
                                #15

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

                                鲍 1 条回复 最后回复
                                0
                                • L las_aves

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

                                  鲍 离线
                                  鲍 离线
                                  鲍永道
                                  发表于 最后由 编辑
                                  #16

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

                                  1 条回复 最后回复
                                  0

                                  你好!看起来您对这段对话很感兴趣,但您还没有一个账号。

                                  厌倦了每次访问都刷到同样的帖子?您注册账号后,您每次返回时都能精准定位到您上次浏览的位置,并可选择接收新回复通知(通过邮件或推送通知)。您还能收藏书签、为帖子顶,向社区成员表达您的欣赏。

                                  有了你的建议,这篇帖子会更精彩哦 💗

                                  注册 登录
                                  回复
                                  • 在新帖中回复
                                  登录后回复
                                  • 从旧到新
                                  • 从新到旧
                                  • 最多赞同


                                  • 登录

                                  • 没有帐号? 注册

                                  • 登录或注册以进行搜索。
                                  • 第一个帖子
                                    最后一个帖子
                                  0
                                  • 版块
                                  • 标签
                                  • 热门
                                  • 用户
                                  • 群组