首页 > 其他分享 >Odoo中防止用户同一时间多次点击同一按钮触发函数

Odoo中防止用户同一时间多次点击同一按钮触发函数

时间:2023-12-21 15:31:41浏览次数:33  
标签:function 函数 button Odoo disabled 点击 按钮 同一时间

我们将探讨如何在Odoo中实现一个全局防重复点击功能,以防止用户在短时间内重复点击按钮而触发多次函数调用。这种情况通常发生在用户不断快速点击同一个按钮时,导致后端函数被多次调用,可能会引起数据错误或性能问题。

在Odoo中,我们可以通过自定义模块来实现这个功能。

首先,我们需要在button_click.js文件中定义我们的防重复点击函数,如下所示:

odoo.define('global_debounce.ButtonClick', function (require) {
    "use strict";

    $(document).ready(function() {

        function debounceButtonClicked(event) {
            var $button = $(event.currentTarget);
            if (!$button.is(':disabled')) {
                // 禁用按钮
                $button.prop('disabled', true);
                console.log("Button disabled:", $button.is(':disabled'));
                // 延时重新启用按钮
                //setTimeout(function () {
                  //  console.log('Button is re-enabled');
                    $button.prop('disabled', false);
                //}, 3000); // 设置防重复点击时间,例如3秒
            }
        }

        // 绑定全局点击事件
        $(document).on('click', 'button', debounceButtonClicked);
    });
});

在上面的代码中,我们定义了一个名为debounceButtonClicked的函数,该函数会在按钮点击事件发生时被调用。当按钮被点击时,我们首先检查按钮是否已被禁用。如果没有,我们将其禁用,并设置一个3秒的延时,之后再次启用按钮。

接下来,我们需要在asset.xml文件中引入这个JavaScript文件,以便它能够在Odoo中被加载:

<odoo>
    <data>
        <template id="assets_backend" name="global_debounce assets" inherit_id="web.assets_backend">
            <xpath expr="." position="inside">
                <script type="text/javascript" src="/your_module_name/static/src/js/button_click.js"/>
            </xpath>
        </template>
    </data>
</odoo>

请确保将/your_module_name/替换为您的模块的实际路径。

最后,我们需要创建一个自定义按钮,并将其绑定到一个函数,该函数将模拟一个3秒的休眠过程。在Odoo的视图XML中,我们可以这样定义按钮:

<odoo>
    <data>
        <!-- Your form view extension -->
        <record id="your_module.form_view_extension" model="ir.ui.view">
            <field name="name">your.model.form.inherit</field>
            <field name="model">your.model</field>
            <field name="inherit_id" ref="base.view_your_model_form"/>
            <field name="arch" type="xml">
                <xpath expr="//form/sheet" position="inside">
                    <button string="Sleep 3 Seconds" type="object" name="button_sleep_function"/>
                </xpath>
            </field>
        </record>
    </data>
</odoo>

在您的模型中,您需要定义button_sleep_function函数,如下所示:

from odoo import models, api
import time

class YourModel(models.Model):
    _name = 'your.model'

    @api.multi
    def button_sleep_function(self):
        time.sleep(3)  # 模拟耗时操作,休眠3秒
        return True

现在,当用户点击这个按钮时,它将被禁用3秒钟,期间无法再次被点击,从而防止了函数的多次触发。

标签:function,函数,button,Odoo,disabled,点击,按钮,同一时间
From: https://blog.51cto.com/u_14480405/8924504

相关文章

  • Odoo16—权限控制
    odoo的权限控制是通过用户组来实现的,在用户组中配置控制权限,然后再添加用户到用户组中,从而实现对用户的访问和操作权限控制。一个用户可以属于多个用户组,用户最终的权限范围取决于所属用户组权限的并集。在用户组中可以声明哪些数据的控制权限呢?我们打开开发者模式,通过“设置-用......
  • odoo rpc用法
     js /**@odoo-module**/import{registry}from"@web/core/registry";import{Layout}from"@web/search/layout";import{getDefaultConfig}from"@web/views/view";import{Component,onWillStart,useSubEnv}from&q......
  • Odoo_vscode调试
    1.正常开发调试{"name":"Odoo开发调试","type":"python","python":"/home/wdc/work/venv/bin/python3","request":"launch",......
  • 按钮
     切换页面 自复位按钮 切换按钮 ......
  • 微信小程序顶部自定义标题对齐胶囊按钮
    微信小程序顶部自定义标题样式对其胶囊按钮css中使用了uniapp的var(--status-bar-height))获取系统栏高度,js中使用了uni.getMenuButtonBoundingClientRect();该api获取小程序菜单按钮的位置信息,返回的有胶囊按钮的宽、高、上、右、下、左,本例中使用了胶囊按钮的top信息示例图......
  • flutter better_player 增加投屏按钮
    better_player播放器默认不可以修改UI需要增加投屏按钮则需要自定义UI但是自定义UI需要布局有需要定义手势动作还需要监听播放事件有没可能服用原来的一切仅仅增加一个投屏按钮呢?答案是肯定的第一步设置主题默认安卓和IOS我们设置自定义BetterPlayerControlsC......
  • 多按钮触发事件
     usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespaceWindowsFormsApp1{publicpartialc......
  • unity打包扔到iOS项目里,点击按钮没反应,
    逼逼赖赖一大堆下边的错误DelayBtn:setBtnDisable()QFramework.ProbilityHelper:InvokeGracefully(UnityAction)UnityEngine.Events.InvokableCall:Invoke()UnityEngine.Events.UnityEvent:Invoke()UnityEngine.UI.Button:Press()UnityEngine.UI.Button:OnPointerClick(Poin......
  • [CSharpTips]C# 控制台程序屏蔽关闭按钮,关闭快速编辑模式,注册关闭事件
    C#控制台程序屏蔽关闭按钮,关闭快速编辑模式,注册关闭事件usingSystem;usingSystem.Collections.Generic;usingSystem.Diagnostics;usingSystem.IO;usingSystem.Linq;usingSystem.Runtime.InteropServices;usingSystem.Text;usingSystem.Threading;usingSystem.......
  • vue升序降序按钮功能实现
    需求:默认升序,悬浮按钮变色,点击按钮下标跟随变化。html<divclass="right"@click="change(item,index)"v-for="(item,index)inbtnList":key="index">{{item.lable}}<divclass="......