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

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

时间:2023-09-22 09:25:04浏览次数:59  
标签: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/17721527.html

相关文章

  • odoo中用javascript调用model中定义好的方法,及要注意的坑
    odoo中如果前端界面要调用后台model中写好的方法,很简单。使用do_action即可,比如要调用改res.users的默认语言后执行的方法odoo.define('switch_language.SwitchLanguageMenu',function(require){"usestrict";varModel=require('web.Model');varsessi......
  • 无涯教程-JavaScript - F.INV函数
    描述F.INV函数返回F概率分布的倒数。如果p=F.DIST(x...),则F.INV(p...)=x。F分布可用于比较两个数据集变异程度的F检验。语法F.INV(probability,deg_freedom1,deg_freedom2)争论Argument描述Required/OptionalProbabilityAprobabilityassociatedwiththeF......
  • 无涯教程-JavaScript - FISHER函数
    描述FISHER函数返回x处的Fisher变换。这种转换产生的功能通常呈正态分布而不是倾斜。使用此功能对相关系数执行假设检验。语法FISHER(x)争论Argument描述Required/OptionalXAnumericvalueforwhichyouwantthetransformation.RequiredNotesFisher变换的等......
  • docker存储路径修改到自定义目录路径
    通过修改Docker配置文件的方式来修改Docker数据存储路径,以减少系统盘的占用空间。具体步骤如下:1、停止Docker服务sudosystemctlstopdocker2、备份当前的Docker数据存储目录/var/lib/dockersudomv/var/lib/docker/var/lib/docker.bak3、创建新的Docker数据存......
  • JavaScript Library – Svelte
    前言上一回我介绍了 Alpine.js。作为我开发企业网站draft版本的renderengine。用了一阵子后,我觉得它真的非常不好用。所以打算换一个。前端有好几个framework/library/compiler都可以用来做MVVMrenderengine。比如Angular、React、Vue、LIt、Solid、Qwik、Svelt......
  • 每日一题:vue3自定义指令大全(呕心沥血所作,附可运行项目源码)
    1.VUE常用指令大全本项目所有指令均为全局注册,使用时直接在组件中使用即可。指令目录:src/directives页面目录:src/views具体可查看源码1.1权限指令封装一个权限指令,在模板中根据用户权限来控制元素的显示或隐藏。permission.jsimport{ref,watchEffect}from'vue';c......
  • 自定义实现promise.all
    Promise.all是一个在JavaScript中常见的函数,用于处理一个Promise数组。当数组中的所有Promise都完成时,Promise.all将返回一个新的Promise,该Promise将解析为包含所有输入Promise解析值的数组。如果任何一个Promise失败,返回的Promise将立即被标记为失败,并且该数组将只包含失败的Prom......
  • JavaScript实现数组对象去重
    有多种实现方式:一、使用 Set 对象:1Array.from(new Set(array))该方法会先创建一个 Set 对象,然后再使用 Array.from 方法将 Set 对象转换为数组,因为 Set 对象不允许有重复的元素,所以这样可以实现去重的效果。但是,如果数组中的元素是对象,Set 对......
  • Javascript闭包(Closure)
    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。下面就是我的学习笔记,对于Javascript初学者应该是很有用的。一、变量的作用域要理解闭包,首先必须理解Javascript特殊的变量作用域。变量的作用域无非就是两种:全局变量和局部变量。Javascript语言......
  • 无涯教程-JavaScript - COUNTIFS函数
    描述COUNTIFS函数将多个条件应用于跨多个范围的单元格,并计算满足所有条件的次数。语法COUNTIFS(criteria_range1,criteria1,[criteria_range2,criteria2]…)争论Argument描述Required/Optionalcriteria_range1Thefirstrangeinwhichtoevaluatetheassociat......