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

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

Odoo 中文社区

  1. 主页
  2. 版块
  3. Odoo 新手求助
  4. odoo12 widget appendTo Dom元素的问题

odoo12 widget appendTo Dom元素的问题

已定时 已固定 已锁定 已移动 Odoo 新手求助
4 帖子 2 发布者 657 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 小 离线
    小 离线
    小狮子
    写于 最后由 编辑
    #1

    我最跟着官方教程做demo的时候遇到了一个问题想请教下各位大神——
    Widget实例化以后 尝试appendTo模板页的一个dom元素中,打开页面时报了一个错误(如图)!
    1562643795(1).png

    js代码:

    odoo.define('todo_Widget_Conuter', function (require) {
        "use strict";
    
        //var widgetRegistry = require('web.widget_registry');
        var Widget = require('web.Widget');
    
        var Counter = Widget.extend({
            template: 'todo.counterBtnTemp',
            xmlDependencies: ['/todo/static/src/xml/widgetTemplate.xml'],
            events: {
                'click button': '_onClick',
            },
            init: function (parent) {//value
                this._super(parent);
                this.count = 1;
            },
            _onClick: function () {
                this.count++;
                this.$('.val').text(this.count);
            },
            willStart:function(){
                console.log('this is willStart');
            },
            start:function(){
                console.log('this is start');
                return this._super();
            },
        });
    
    // Create the instance
    var counter = new Counter(this);
    // Render and insert into DOM
    counter.appendTo($('.some-div'));
    
    return Counter;
    });
    

    模板代码:

    <?xml version="1.0" encoding="UTF-8"?>
    <templates id="template" xml:space="preserve">
        <t t-name="todo.counterBtnTemp">
            <span class="val"><t t-esc="widget.count"/></span>
            <button>Increment</button>>
        </t>
    </templates>
    

    视图代码:

    <?xml version="1.0" encoding="utf-8"?>
    <odoo>
        <template id="assets_common" inherit_id="web.assets_common" name="todo Backend Assets (used in backend interface)">
            <xpath expr="//script[last()]" position="after">
                <script type="text/javascript" src="/todo/static/src/js/jsreference.js"></script>
            </xpath>
            <xpath expr="//script[last()]" position="after">
                <script type="text/javascript">
                    
                </script>
            </xpath>
        </template>
        <template id="todosite" name="Todo Site Template">
            <t t-call="website.layout">
                <div class="some-div"></div>
            </t>
        </template>
    </odoo>
    
    1 条回复 最后回复
    0
    • 鲍 离线
      鲍 离线
      鲍永道
      写于 最后由 编辑
      #2

      你这个本身的实现的思路和具体的js写法都不对,你还是表达清楚你要具体实现什么东西?

      小 1 条回复 最后回复
      0
      • 小 离线
        小 离线
        小狮子
        在 回复了 鲍永道 最后由 编辑
        #3

        @鲍永道 是这样 我是跟着odoo12 官方文档 javascript reference那一篇关于widget用法的官方示例做的,原文就是简单地给了些关键代码,我理解的它想实现的就是在class='some-div' 这个div中插入自定义的widget模板(这个模板就是一个span和一个button,js赋能 点btn后 span内容就会变化)。不知这样是否能够描述清楚。

        1 条回复 最后回复
        0
        • 鲍 离线
          鲍 离线
          鲍永道
          写于 最后由 编辑
          #4

          这个直接可extend某个已经存在的widget,也不用直接wxtend widget,另外,extend写好后,需要在注册在widget中,后面才能实际使用。

          1 条回复 最后回复
          0

          • 登录

          • 没有帐号? 注册

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