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

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

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

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

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

odoo12 widget appendTo Dom元素的问题



  • 我最跟着官方教程做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>
    


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



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



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


Log in to reply