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

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

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

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

web js extend



  • 1、什么时候需要web.WebClient,这个作用是什么?

    2、在web.core中返回的json数据中会有这些键:比如one2many_view_registry,list_widget_registry,别的js可以给里面add数据,比如core.one2many_view_registry.add('list', One2ManyListView)
    这个是添加后有什么效果变化,这些东西又怎么使用?

    3、我formView.extend()后没有alert出东西,哪里有问题了?

    我是这样理解的:
    1、odoo中的tree,list视图实际是不是没有html,都是通过js写出来的啊,kanban视图应该是通过qweb的template写出来的吧;
    如果我想要修改某个视图的布局,增加元素,都是要写js实现的吧。

    2、至于什么是widget,比较模糊。

    odoo.define('sps_product', function(require) {
        'use strict';
    
        var Client = require('web.WebClient');
        var Model = require('web.DataModel');
        var Core = require('web.core');
        // add
        var formView = require('web.FormView');
        var formRelational = require('web.form_relational');
        var ListView = require('web.ListView');
        var o2m = Core.one2many_view_registry;
        alert('core o2m', o2m);
    
        formView.extend({
            init:function(parent){
                this._super(parent);
                alert('coming11');
                this.$el.append("<div>We are so happy to see you again in this menu!</div>");
                alert('append after---');
    //            var self = this;
    //            this._super.apply(this, arguments);
    //            $query = $el.html('<input type="text" placeholder="Search"/>');
    //            alert('add item===', $query);
    //            this.$('div.o_cp_right').before($query);
            },
        });
    


  • @huiweb js extend 中说:

    extend

    继承重写用 include,
    继承复制用 extend

    把extend 换成include试试



  • @guwenfengvip163-com
    换成include页不行的,感觉inlude里面的没有进去啊,都没有alert的



  • 你的JS 进去了么? alert('core o2m', o2m);  这一句能弹出来不



  • @guwenfengvip163-com
    alert('core o2m', o2m);这一句alert出来了,是include里面的没有alert出来



  • @hui

    var FormView = require('web.FormView');
    
    FormView.include({
        defaults: _.extend({}, FormView.prototype.defaults, {
            disable_autofocus: config.device.touch,
        }),
        init: function () {
            this._super.apply(this, arguments);
            if (config.device.size_class <= config.device.SIZES.XS) {
                this.rendering_engine = new FormRenderingEngineMobile(this);
            }
        },
    });
    


  • 可以远程帮你看下,这方面的js扩展和自定义我写过很多了。
    qq:601939654



  • @guwenfengvip163-com
    没反应的



  • @guwenfengvip163-com @鲍永道

    这是@鲍永道 帮忙写的,目前可以达到的效果是在form视图中可以显示出跟list视图一样的search视图。

    其他问题:在form视图中输入需要搜索的字段的值后也可以像在list视图中出现下拉式的选择搜索哪个字段,但是搜索后不会出现结果,需要点击面包屑导航的返回去才能看见结果。(也就是搜索后返回的还是等同于在list视图搜索的结果)

    可改进:我觉得效果应该是搜索后直接跳转到对应的form视图。具体修改涉及到哪里的方法我就不清楚了。

    /**
     * @author taony
     * @deprecated 用于odoo form可以search搜索
     * @since 
     */
    odoo.define('web.taony_form_search', function (require) {
        'use strict';
    
        var ControlPanel = require('web.ControlPanel');
        var Bus = require('web.Bus');
        var data = require('web.data');
        var Widget = require('web.Widget');
    
        ControlPanel.include({
            _update_search_view: function (searchview, is_hidden) {
                var self = this;
                if (searchview) {
                    searchview.$buttons = this.nodes.$searchview_buttons;
                    searchview.toggle_visibility(true);
                    self.nodes.$breadcrumbs.width('50%');
                }
    
                this.nodes.$searchview.toggle(true);
                this.$el.toggleClass('o_breadcrumb_full', !!is_hidden);
            }
        });
    });
    
    


  • @hui
    我根据我的需要修改了一点点,让这个form视图中的search框只在我需要的model中显示出来,其他的model就不显示了。

    有个疑问:在浏览器中查看控制台日志的时候会发现,进入list视图的时候,searchview是有值的,也就可以找到正在操作的model,但是当点击某一个product进入对应的form视图的时候,会先出现searchview的值为undefined的,然后出现searchview的值又回来的现象。我觉得应该跟update的方法有关,但是关键点在哪个,这个就没看懂了。

    高手在哪里,出来指点指点。

    代码如下:

    /**
     * @author taony
     * @deprecated 用于odoo form可以search搜索
     * @since 
     */
    odoo.define('web.taony_form_search', function (require) {
        'use strict';
    
        var ControlPanel = require('web.ControlPanel');
        var Bus = require('web.Bus');
        var data = require('web.data');
        var Widget = require('web.Widget');
    
        ControlPanel.include({
    
            _update_search_view: function (searchview, is_hidden) {
                var self = this;
                if (searchview) {
                    var model = searchview.model
                    if ('product.template' == model){
                        searchview.$buttons = this.nodes.$searchview_buttons;
                        searchview.toggle_visibility(true);
                        self.nodes.$breadcrumbs.width('50%');
                        }
                }
                this.nodes.$searchview.toggle(true);
                this.$el.toggleClass('o_breadcrumb_full', !!is_hidden);
            }
        });
    });