Odoo8在TreeView左上角增加自定义按钮以及通过继承生成自定义的View_Mode

今天有网友在问怎么在TreeView左上角增加一个自定义的按钮,在查询Odoo 自带的模块,发现在purchase_requisition中有使用,并且此模块还应用到了自定义View_Mode的情况,所以今天拿出来分析一下,有兴趣的童鞋可以参考说明去模块中查看详细内容。

首先模块显示的效果如下图:

这个是在招标单中,如果一个产品有多个询价单,则在完成招标单时,系统会显示此界面,需要你确认一个最终有效的询价单,这个界面需要打开配置参数中如下图所示的项目才会有显示。

仔细分析源码,这个View的定义是在purchase_requisition_view.xml中,主要内容如下:

<record id="purchase_order_line_tree_tender" model="ir.ui.view">
           <field name="name">purchase.order.line.tree.tender</field>
           <field name="model">purchase.order.line</field>
           <field eval="1" name="priority"/>
           <field name="arch" type="xml">
               <tree string="Purchase Order Lines" create="false" colors="blue:state == ‘confirmed‘;gray:state == ‘cancel‘">
                   <field name="name"/>
                   ......
               </tree>
           </field>
    </record>

然后为这个View定义了一个动作,主要内容如下:

 

<record id="purchase_line_tree" model="ir.actions.act_window">
                <field name="name">Bid Lines</field>
                <field name="res_model">purchase.order.line</field>
                <field name="context">{"search_default_groupby_product" : True,}</field>
                <field name="view_type">form</field>
                <field name="view_mode">tree_purchase_order_line_compare</field>
                <field name="view_id" ref="purchase_order_line_tree_tender"/>
                <field name="search_view_id" ref="purchase.purchase_order_line_search"/>
        </record>

主要看上面动作的定义中,view_mode节点是放的tree_purchase_order_line_compare,与普通的tree,form是不一样的,这个新的view_mode是哪里来的呢?

我们继续来看addons/purchase_requisition/static/src/js/web_addons.js中的内容,其中有一段主要内容如下:

instance.web.views.add(‘tree_purchase_order_line_compare‘, ‘instance.web.purchase_requisition.CompareListView‘);
    instance.web.purchase_requisition.CompareListView = instance.web.ListView.extend({
        init: function() {
            var self = this;
            this._super.apply(this, arguments);
            this.on(‘list_view_loaded‘, this, function() {
                if(self.__parentedParent.$el.find(‘.oe_generate_po‘).length == 0){
                    var button = $("<button type=‘button‘ class=‘oe_button oe_highlight oe_generate_po‘>Generate PO</button>")
                        .click(this.proxy(‘generate_purchase_order‘));
                    self.__parentedParent.$el.find(‘.oe_list_buttons‘).append(button);
                }
            });
        },
        generate_purchase_order: function () {
            var self = this;
            new instance.web.Model(self.dataset.model).call("generate_po",[self.dataset.context.tender_id,self.dataset.context]).then(function(result) {
                self.ViewManager.ActionManager.history_back();
            });
        },
    });

这里第一行add方法就是把一个新的view_mode名称跟一个自定义的 instance.web.purchase_requisition.CompareListVIew关联起来,新的view_mode是继承自 web.ListView,所以具备原来的ListView所有属性和方法定义。在新的view_mode的init方法,通过jQuery新加了一个 button,并且指定该按钮的点击事件响应generate_purchase_order方法,这个方法就在如下面有定义,在这个方法中触发了 purchase_requisition.py中的generate_po方法,在执行完以后并回退到原来打开此view的页面。

以上内容包括了js增加自定义按钮,并响应py中的方法流程,并且也运用了view_mode的继承,为自定义更丰富的view提供了参考。

最后顺便记录一下打开此视图的代码为:

def open_product_line(self, cr, uid, ids, context=None):
        """ This opens product line view to view all lines from the different quotations, groupby default by product and partner to show comparaison
            between supplier price
            @return: the product line tree view
        """
        if context is None:
            context = {}
        res = self.pool.get(‘ir.actions.act_window‘).for_xml_id(cr, uid, ‘purchase_requisition‘, ‘purchase_line_tree‘, context=context)
        res[‘context‘] = context
        po_lines = self.browse(cr, uid, ids, context=context)[0].po_line_ids
        res[‘context‘] = {
            ‘search_default_groupby_product‘: True,
            ‘search_default_hide_cancelled‘: True,
            ‘tender_id‘: ids[0],
        }
        res[‘domain‘] = [(‘id‘, ‘in‘, [line.id for line in po_lines])]
        return res
时间: 2024-08-14 08:23:01

Odoo8在TreeView左上角增加自定义按钮以及通过继承生成自定义的View_Mode的相关文章

ECharts自定义toolbox中增加自定义按钮

今天想能不能在ECharts中的ToolBox增加自己的按钮,然后读了一下ToolBox代码,自己试了试,验证是可以的. 1.效果图 图片中红色框起来的按钮 2.代码 selfButtons:{//自定义按钮 danielinbiti,这里增加,selfbuttons可以随便取名字 show:true,//是否显示 title:'自定义', //鼠标移动上去显示的文字 icon:'test.png', //图标 option:{}, onclick:function(option1) {//点击

IOS开发——UI进阶篇(十八)核心动画小例子,转盘(裁剪图片、自定义按钮、旋转)图片折叠、音量震动条、倒影、粒子效果

一.转盘(裁剪图片.自定义按钮.旋转) 1.裁剪图片 将一张大图片裁剪为多张 // CGImageCreateWithImageInRect:用来裁剪图片 // image:需要裁剪的图片 // rect:裁剪图片的尺寸,传递是像素 CGImageRef norImage = CGImageCreateWithImageInRect(norBigImage.CGImage, clipRect); 2.每次点击按钮立马变为选中状态,并且取消上次的按钮的选中状态 当然还要重写- (void)setH

Cocos2d-x 自定义按钮类控制精灵攻击----之游戏开发《赵云要格斗》

本篇要讲讲怎么自定义按钮类,并通过这个按钮类的对像来控制精灵的攻击.在看本篇之前最好先看看上一篇 Cocos2d-x虚拟摇杆控制精灵上下左右运动----之游戏开发<赵云要格斗>,要素材和项目代码的把邮箱留下吧,因为这个项目还没弄完,我一直在改. 精灵的攻击也是一个动画,只不过,这个动画只播放一次,相当于在界面上加一个按钮,然后你点一次按钮,精灵就播放一次动画. 一.自定义按钮类 按钮可以用COCOS2D-X自带的,想着方便一点,我就自己封装了一个按钮类ControlButton,在里面添加一个

django xadmin 插件(3) 列表视图新增自定义按钮

效果图: 编辑按钮是默认的list_editable属性对应的插件(xadmin.plugins.editable) 放大按钮对应的是自定义插件. 自定义按钮源码: xplugin.py(保证能够直接或者间接被adminx.py引用到即可) # -*- coding:utf-8 -*- import xadmin from xadmin.views import BaseAdminPlugin, ListAdminView from xadmin.views.edit import ModelF

wordpress优化之结合prism.js为编辑器自定义按钮转化代码

原文链接 http://ymblog.net/2016/07/24/wordpress-prism/ 继昨天花了一天一夜的时间匆匆写了主题Jiameil3.0之后,心中一直在想着优化加速,体验更好,插件更少,到目前为止,博客插件有多说,Crayon Syntax Highlighter代码高亮插件,super cache缓存插件,百度sitemap.在没有缓存的情况下,首页dom初识加载完成(不是document加载完成)的时间为5-6s左右,有缓存的情况下大概为2s左右,觉得慢了,查看源码,发

Web jquery表格组件 JQGrid 的使用 - 5.Pager翻页、搜索、格式化、自定义按钮

系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件及方法 Web jquery表格组件 JQGrid 的使用 - 5.Pager翻页.搜索.格式化.自定义按钮 Web jquery表格组件 JQGrid 的使用 - 6.准备工作 & Hello JQGrid Web jquery表格组件 JQGrid 的使用 - 7.查询数据.编辑数据.删除数据

【iOS开发-8】UIButton类型属性简单归纳以及自定义按钮的设置

(1)UIButton类继承自UIControl,而UIControl继承自UIView,因为UIView就是个矩形区域,所以UIButton实例化的对象其实都是一个矩形,虽然有各种圆角.增加联系人.信息按钮等等,给它们加个背景它们就现形成矩形了,而且它们有个frame属性,这就是设置位置和矩形框的. (2)UIButton创建一个按钮不用实例化,也就是不用alloc和init,而是直接调用内置的几个工厂方法即可,这一点和UILabel *label1=[[UILabel alloc]init]

jqGrid自定义按钮和汇总问题

1,jqGrid的自定义按钮事件,是在左下角导航栏产生的, jQuery(grid_selector).jqGrid('navGrid', "#tableId", { edit: true,add: true, del: true,view: true}, { //edit按钮的一些属性 可以增加一些上述四个方法的设置 beforeShowForm: function (e) {} },{ //add按钮的一些属性 },{...},{...} //在上述四个方括号后直接调用此方法 .j

IOS 自定义按钮(代码实现)+九宫格

在一些下载应用里整个页面都是按钮,有好多好多,但是仔细观察不难发现他们很有规律.就像下面一样?? 很有规律的排列在屏幕上,那么这需要我们怎么去做能. 正如标题,我们需要了解两个知识点,分别是自定义按钮和九宫格,九宫格是一种算法.在这里我给大家列出方法,并不过多解释,希望会对大家有帮助. 代码如下: 自定义按钮部分 // // CXButton.m // CX-自定义按钮(代码实现)+九宫格 // // Created by ma c on 16/3/18. // Copyright ? 2016