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

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

时间:2023-02-20 00:13:04浏览次数:38  
标签: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/shouke/p/17094265.html

相关文章

  • JavaScript回调函数
    回调函数是一段可执行的代码段,它作为一个参数传递给其他的代码,其作用是在需要的时候方便调用这段(回调函数)代码。在JavaScript中函数也是对象的一种,同样对象可以作为参数传......
  • spring,自定义注解,工厂模式,策略模式优化 if else,jdk1.7
    最近项目中使用mqtt监听消息,再根据消息做各种处理,使用大量的ifelse,代码异常难维护,参考的地址找不到了。。。 以下为实现:接收mqtt的接口类packagecom.mhm.mqttlistener;im......
  • #yyds干货盘点#【愚公系列】2023年02月 微信小程序-Vant实现自定义tabBar
    前言小程序自定义tabBar官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/ability/custom-tabbar.html1、说明小程序自定义tabBar两种方式:一种采用......
  • odoo 为form表单视图添加chatter功能
    实践环境Odoo14.0-20221212(CommunityEdition)需求描述如图,给表单新增一个类似聊天的窗口,当记录一些表单活动(本例为自动记录当前记录状态变化)需求实现模型定义......
  • DVWA靶场实战(十四)——JavaScript
    DVWA靶场实战(十四)五、JavaScript:1.漏洞原理:这里的JavaScript其实是JavaScriptAttack也就是JS攻击。JavaScript是一种基于对象和事件驱动的、并具有安全性能的脚本......
  • JavaScript知识汇总
    1JavaScript功能直接写入HTML输出流(在HTML输出中使用document.write,如在文档加载后使用该方法会覆盖整个文档)对事件进行响应(如鼠标事件、键盘事件等)改变HTML内......
  • 自定义手机号码验证器
    因为validator官方没有提供验证手机号码的逻辑,所以得自己定义 1.编写验证函数//ValidateMobile//验证手机号码是否正确funcValidateMobile(f1validator.FieldLeve......
  • 【JavaScript】17_debug,立即执行函数 与 严格模式
    14、debug<script>//debugger//在代码中打了一个断点console.log(a)//2vara=1console.log(a)//1fu......
  • 【JavaScript】18_面向对象,类与属性
    1、面向对象面向对象编程(OOP)程序是干嘛的?程序就是对现实世界的抽象(照片就是对人的抽象)对象是干嘛的?一个事物抽象到程序中后就变成了对象在程序的世界中,一切皆对象面向对象......
  • Leetcode题1两数之和 JavaScript语言
    1.两数之和方案一,暴力双循环读完题目,马上能想到的方案就是双循环,挨个排查,写出来也很快:vartwoSum=function(nums,target){constlen=nums.length;for......