首页 > 编程语言 >Odoo 通过Javascript调用模型中自定义方法

Odoo 通过Javascript调用模型中自定义方法

时间:2023-06-11 10:44:23浏览次数:53  
标签:function Javascript parentElement 自定义 res wizard rpc Odoo action

实践环境

Odoo 14.0-20221212 (Community Edition)

代码实现

在js脚本函数中调用模型中自定义方法:

this._rpc({
    model: 'demo.wizard', // 模型名称,即模型类定义中 _name 的值
    method: 'action_select_records_via_checkbox', // 模型中自定义名称
    args: ['arg_value'] // 传递给模型方法参数列表,列表中每个元素对应模型方法的一个位置参数
}).then(function (res) { // res为模型方法返回值
    console.log(res);
    // do something
});

  

模型方法定义

 
#!/usr/bin/env python
# -*- coding:utf-8 -*-

from odoo import models,fields,api

class DemoWizard(models.TransientModel):
    _name = 'demo.wizard'
    _description = 'demo wizard'

    #...此处代码已省略
    
    @api.model
    def action_select_records_via_checkbox(self, *args):
        '''通过wizard窗口界面复选框选取记录时触发的操作
        @params: args 为tuple元组,如果方法不采用位置参数,则传递的是啥,参数就是啥
        '''
        # do something
        
        return True

  

 

注意:this._rpc函数不能在非普通函数中使用,其使用范围可参考以下示例

 
odoo.define('estate.ListRenderer', function (require) {
    "use strict";
 	var ListRenderer = require('web.ListRenderer');
	ListRenderer = ListRenderer.extend({
        _onToggleCheckbox: function (ev) {
            //// ...此处代码已省略
            this._rpc({
                model: this.modelName,
                method: this.modelMethod,
                args: [this.recordsSelected]
            }).then(function (res) {
                // ...此处代码已省略
            });
             ...
            this._super.apply(this, arguments);
        }

	});
    // ...此处代码已省略
});

  

那问题来了,如果希望在普通的javascript函数中使用上述请求功能,咋办?参考如下示例代码

示例代码

function do_confirm_action(modelName, modelMethod){
    $("button[name='action_confirm']").attr("disabled", true);
    var wizard_dialog = $(event.currentTarget.offsetParent.parentElement.parentElement);
    var dataUUID = $(event.currentTarget.parentElement.parentElement.parentElement.parentElement).find('div.o_list_view').prop('id');

    var rpc = odoo.__DEBUG__.services['web.rpc']; 
    rpc.query({
        model: modelName,
        method: modelMethod,
        args: [JSON.parse(window.sessionStorage.getItem(dataUUID) || '{}')]
    }).then(function (res) {
        if (res == true) {
            wizard_dialog.css('display', 'none');
            window.sessionStorage.removeItem(dataUUID);
        } else {
            $("button[name='action_confirm']").attr("disabled", false);
        }
    }).catch(function (err) {
        $("button[name='action_confirm']").attr("disabled", false);
    });

}

  

 

标签:function,Javascript,parentElement,自定义,res,wizard,rpc,Odoo,action
From: https://www.cnblogs.com/pythonClub/p/17472608.html

相关文章

  • odoo16弹出对话框中显示SearchPanel
    在odoo中,有些数据模型的Search视图可能会定义关于SearchPanel的部分,但这部分定义不会在弹出对话框中显示。如员工的list视图显示如下: 但如果我们在一个挑选员工的弹出对话框中,显示是这样子的。 这样如果员工较多,我们还要进一步输入搜索条件来进行过虑,不太方便操作。那如果......
  • JavaScript学习笔记:Web安全模型
    为了保证安全,浏览器中的JavaScript不能读写设备中的文件,也不能访问任意的服务器。同源策略同源策略指的是脚本只能访问与包含它的文档同源资源。源是指文档URL中的协议、主机与端口部分,完全相同则是同源,任意一项不同都不是同源。脚本文件的URL与同源策略毫不相干,同源策略至于......
  • JavaScript学习笔记:客户端编程之异常处理
    未被捕获的异常在程序中,往往会出现异常。虽然主动捕获这些异常是保证程序健壮的必要做法,但是难免会漏掉一些。对于未被捕获的异常,浏览器会在控制台显示一条错误信息,该信息包含异常信息和其在代码中出现的位置。window.onerrorWindow对象有一个onerror属性,将其指定为一个函数,可......
  • Android 自定义View模板代码记录
    原文地址:Android自定义View模板代码记录-Stars-One的杂货小窝每次写自定义View,需要重写3个构造方法,如果使用AndroidStudio直接创建,会导致View代码过多,于是稍微删了点多余代码,搞一份简洁的模板代码供自己使用模版代码importandroid.content.Contextimportandroid.util.......
  • UE4 自定义StaticMesh碰撞失效
    将画刷编辑的Actor转换成静态网格体后,原有的碰撞消失了,解决办法如下:首先在内容浏览器中找到需要更改碰撞配置的网格体双击进入静态网格编辑器页面,右侧找到细节面板找到碰撞-->碰撞复杂度-->选择将复杂碰撞用作简单碰撞保存即可......
  • 自定义字体/图标的使用
    图标下载网站 选择需要的图标下载代码 下载后的代码 demo_index.html里会教你怎么使用1. 拷贝到index.css将这五个文件拷贝 拷贝到新建的文件夹font 修改里面路径 2.  拷贝到index.css 3.  demo_index.html里有Unicode码 如下图使用 ......
  • javascript简单介绍
    javaScript简介介绍:一种弱类型世界上最流行的脚本语言,其源代码不需要经过编译,而是由浏览器直接运行,控制网页的行为。表现层CSScss层叠样式表是一门标记语言,并不是编程语言,因此不能进行自定义变量,不可以引用等,就是不具备任何语法支持。前端人员提供了一种css的预处理器,提供css......
  • 改造Python中文拼音扩展库pypinyin补充自定义声母全过程
    问题要从昨天说起,应根球老师发给我一个代码问可能是啥原因,如下:该函数的第二个参数3含义为只保留声母,为啥“应”的声母丢了呢?因为当时正是课间休息,一会儿还要上课,没时间多想,感觉或许是lazy_pinyin()函数的问题,毕竟是个懒惰的函数嘛,于是告诉应老师试试其他函数。今天早上来教研室以后......
  • JavaScript 构造器模式:创建可重用的对象
    前言JavaScript是一种基于对象的语言,对象是JavaScript中最重要的概念之一。在JavaScript中,我们可以使用构造器模式来创建可重用的对象。本文将介绍JavaScript构造器模式的概念、用法和实例,并给出博客标题《JavaScript构造器模式:创建可重用的对象》。构造器模式构造器模......
  • JavaScript中的模块化编程
    JavaScript中的模块化编程模块化编程是一种将程序拆分为独立模块的开发方法,每个模块具有明确定义的功能和接口。JavaScript中的模块化编程能够提高代码的可维护性、可重用性和可测试性。本文将详细介绍JavaScript中的模块化概念、几种常见的模块化方案,并提供更多的代码示例。1.......