跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • 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 中在tree视图中新增自定义按钮

odoo12 中在tree视图中新增自定义按钮

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

    我需要在odoo的tree视图上面的创建/导入按钮旁边增加新的自定义按钮,我按照其他的示例写了一部分代码,现在我在前端可以显示我增加的按钮,但是点击按钮后没有任何反应,下面的是我的js 代码:

    odoo.define('dwapp', function(require){
        "use strict";
    
        var show_button_model = ['dwapp',];
        var core = require('web.core');
        var myListView = require('web.ListView');
        var QWeb = core.qweb;
        console.log("33333");
        myListView.include({
            render_buttons: function($node){
                var self = this;
                this._super($node);
                console.log("123455");
                var tree_model = this.dataset.model;
                for(var i = 0; i < show_button_model.length; i++){
                    console.log("66666");
                    this.$buttons.find('.o_list_tender_button_tree').click(this.proxy('tree_view_action'));
                }
            },
            tree_view_action: function() {
            console.log("222222");
            this.do_action({
                type: "ir.actions.act_window",
                name: "数据库APP",
                res_model: 'dwapp',
                views: [[false,'form']],
                target: 'current',
                view_type: 'form',
                view_mode: 'form',
                flags: {'form':{'action_buttons':true, 'options':{'mode':'edit'}}}
            });
            return {'type':'ir_actions_client','tag':'reload',}
        }
        });
    
        console.log("00000");
    });
    

    哪位大佬帮忙看看,有没有错误,这段代码可以在console中打印出33333,说明这之前的部分没有问题,主要是myListView这一部分有问题。

    PS:我的环境是odoo12 社区版

    1 条回复 最后回复
    0
    • digitalsatoriD 离线
      digitalsatoriD 离线
      digitalsatori 管理员
      写于 最后由 编辑
      #2

      参见这个帖子:https://www.shine-it.net/topic/4506/tree视图增加全局按钮

      【上海先安科技】(tony AT openerp.cn)

      1 条回复 最后回复
      0
      • H 离线
        H 离线
        hui
        写于 最后由 hui 编辑
        #3

        @ssun 这个js里面的有些属性在odoo11里面就已经不适用了,明显的:

        var myListView = require('web.ListView');  
        var tree_model = this.dataset.model;
        

        下面是我测试odoo11,odoo12都可以使用的,你对照看看:

        odoo.define('xxx.add_tree_view_button', function (require) {
            "use strict";
        
            var show_button_model = ['product.template'];//哪些模型显示导入按钮
            var ListController = require('web.ListController');
        
            ListController.include({
                renderButtons: function ($node) {
                    var $buttons = this._super.apply(this, arguments);
                    var tree_model = this.modelName;
                    for(var i=0; i<show_button_model.length; i++) {
                        if (tree_model == show_button_model[i]){
                            var button2 = $("<button type='button' class='btn btn-sm btn-default'>Import Excel</button>")
                                .click(this.proxy('popup_import_wizard'));
                            this.$buttons.append(button2);
                        }
                    }
                    return $buttons;
                },
                popup_import_wizard: function () {
                    this.do_action({
                        type: 'ir.actions.act_window',
                        res_model: 'import.wizard',
                        views: [[false, 'form']],
                        view_mode: "form",
                        view_type: 'form',
                        view_id: 'import_wizard_form',
                        target: 'new',
                    });
                },
            });
        
        });
        
        1 条回复 最后回复
        1
        • S 离线
          S 离线
          ssun
          写于 最后由 编辑
          #4

          @hui 按照你的方法我可以实现了,非常感谢

          H 1 条回复 最后回复
          0
          • H 离线
            H 离线
            hui
            在 回复了 ssun 最后由 编辑
            #5

            @ssun 客气,主要是我也遇到过这问题,而且也是在你贴出来的的代码上进行改进的。有社区朋友的帮助的哦~🙂

            1 条回复 最后回复
            0
            • S 离线
              S 离线
              seasid
              写于 最后由 编辑
              #6

              @ssun 在 odoo12 中在tree视图中新增自定义按钮 中说:

              请问有什么办法可以在指定的一个tree_view中使用这个呢?一个模型有多个tree_view。

              S H 2 条回复 最后回复
              0
              • S 离线
                S 离线
                ssun
                在 回复了 seasid 最后由 编辑
                #7

                @seasid 你可以通过t-if来设定button在哪个模型的tree视图上显示,我的代码是这样的

                <button t-if="widget.modelName == 'dwapp'" class="appbutton o_my_list_button_app" type="button"><a>应用</a></button>
                

                通过t-if来选择模型,具体的你可以参考下https://supportuae.wordpress.com/2017/09/06/how-to-add-button-in-tree-view-header-near-create-and-import-buttons-odoo10/ 这篇文档,只看他第二点模板继承那块就行了

                H 1 条回复 最后回复
                0
                • H 离线
                  H 离线
                  hui
                  在 回复了 ssun 最后由 编辑
                  #8

                  @ssun
                  按你说的我测试了下,
                  首先添加:static/src/xml/xx.xml:

                  <?xml version="1.0" encoding="UTF-8"?>
                  <template id="template" xml:space="preserve">
                      <t t-extend="ListView.buttons">
                          <t t-jquery="button.o_list_button_add" t-operation="replace">
                              <button t-if="widget.model == 'purchase.order'" class="btn btn-primary btn-sm o_list_tender_button_create" type="button">Create Tender</button>
                              <button t-if="widget.model != 'purchase.order'" class="btn btn-primary btn-sm o_list_button_add" type="button">Create</button>
                          </t>
                      </t>
                  </template>
                  

                  其次:在__manifest__.py添加

                  'qweb': ['static/src/xml/*.xml',],
                  

                  测试没有效果,还需要其他操作?
                  还有这个t-if中的widget可以这样用,有没有有文档详细说明的?

                  1 条回复 最后回复
                  0
                  • H 离线
                    H 离线
                    hui
                    在 回复了 seasid 最后由 编辑
                    #9

                    @seasid
                    在js中可以获取到当前view的id,获取方法:

                    this.__parentedParent.views.list.view_id
                    

                    就看怎么获取到自定义的tree view的id,然后对比下应该就可以了

                    ps:js获取这些值,都可以通过console.log(this),在这里面找应该都可以找到的。

                    1 条回复 最后回复
                    0

                    • 登录

                    • 没有帐号? 注册

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