【问题标题】:Triggering a function on pressing enter in a char field odoo 14在字符字段odoo 14中按回车键触发功能
【发布时间】:2022-08-19 05:01:33
【问题描述】:

是否可以在字符字段中按下 Enter 键时触发功能。?

onchange 函数不工作,因为它在函数内部返回另一种形式。

从 js 我想在单击输入按钮时调用模型 customer.status.search 的函数 get_details

class CustomerStatusSearch(models.TransientModel):
    _name = \'customer.status.search\'

     def get_details(self):
        print(\"enter\")
        for li in self:
            customer = self.env[\'res.partner\'].search([(\'id\', \'=\', 23)], limit=1)
          
           return {
                            \'view_type\': \'form\',
                            \'view_mode\': \'form\',
                            \'view_id\': self.env.ref(\'operation.view_registration_student_form\').id,
                            \'res_model\': \'res.partner\',
                            \'target\': \'current\',
                            \'res_id\': customer.id,
                            \'type\': \'ir.actions.act_window\'
                        }



那么有没有任何Javascript代码呢?

    标签: javascript odoo odoo-14


    【解决方案1】:

    您使用 addEventListener 'keypress' 然后检查键码是否是 Enter 键

    document.getElementById('inputField').addEventListener('keypress', function(event) {
            if (event.keyCode == 13) {
                //Run a function here
            }
        });
    

    【讨论】:

    • 只需要这种特殊形式
    • 这个想法是将document.getElementById('inputField')替换为您的特定的表单/输入字段/元素@shahaludheenk
    • 您可以获取该 DOM 元素并执行添加事件侦听器
    【解决方案2】:

    您可以定义一个新的Char 字段来处理Enter 键事件。

    例子:

    odoo.define('Module_Name.FieldChar', function (require) {
    "use strict";
    
        var FieldChar = require('web.basic_fields').FieldChar;
        var registry = require('web.field_registry');
    
        var FieldCharCustom = FieldChar.extend({
            _onKeydown: function (ev) {
                if (ev.which === $.ui.keyCode.ENTER) {
                    // this._someFunction();
                }
                this._super.apply(this, arguments);
            },
        });
    
        registry.add('char_custom', FieldCharCustom);
    
    });
    

    加载js文件,继承web.assets_backed

    <template id="assets_backend" inherit_id="web.assets_backend" name="assets_backend">
        <xpath expr="." position="inside">
            <script type="text/javascript" src="/Module_Name/static/src/js/field_char.js"></script>
        </xpath>
    </template>
    

    然后您只需在视图拱门中设置 char 字段的 widget 属性:

    <field name="name" widget="char_custom"/>
    

    更新
    您可以使用this.rpccustomer.status.search 模型上调用get_details,就像他们在单击按钮以验证inventory 时所做的那样

    例子:

    this._rpc({
        model: 'customer.status.search',
        method: 'get_details',
        args: [record_id]
            }).then(function (res) {
    });
    

    您可以在 init 方法中找到一个示例,说明他们如何从上下文中获取库存 ID

    编辑:

    当您第一次单击自定义字符字段时,向导记录 ID 将不可用,并且您无法调用 get_details 函数,因为它依赖于 selfget_details 函数只返回一个动作(打开合作伙伴表单),这也可以使用 js 代码执行,只需调用 this.do_action 执行窗口动作。

    如果您使用它来搜索特定合作伙伴,则字段值将在 this.recordData 变量中可用。

    如果您在保存前尝试打开合作伙伴表单,Odoo 将显示以下警告:

    The record has been modified, your changes will be discarded. Do you want to proceed?  
    

    为避免这种情况,您可以使用以下方法模拟单击保存按钮:

    $(".o_form_button_save").click();
    

    例子:

    odoo.define('MODULE_NAME.FieldChar', function (require) {
    "use strict";
       var core = require('web.core');
       var _t = core._t;
       var FieldChar = require('web.basic_fields').FieldChar;
       var registry = require('web.field_registry');
    
       var FieldCharCustom = FieldChar.extend({
           _onKeydown: function (ev) {
               this._super.apply(this, arguments);
               if (ev.which === $.ui.keyCode.ENTER) {
                 var self = this;
                 
                 var customer_id = 14;
                 
                 $(".o_form_button_save").click();
                 
                 this._rpc({
                     model: 'ir.model.data',
                     method: 'xmlid_to_res_model_res_id',
                     args: ["base.view_partner_form"],
                 }).then(function (data) {
                   self.do_action(
                     {
                       name: _t('Customer Status'),
                       type: 'ir.actions.act_window',
                       view_mode: 'tree,form',
                       res_model: 'res.partner',
                       target: 'current',
                       res_id: customer_id,
                       views: [[data[1], 'form'], [false, 'list']],
                   });
                 });
               }
           },
       });
    
       registry.add('char_custom', FieldCharCustom);
    
    });
    

    【讨论】:

    • 我只希望它以特定的形式......说模型'migrate.customer',当在一个字段中单击输入时说'位置'它应该触发一个函数说迁移()
    • 您只需在特定视图上设置位置字段的widget 属性。
    • 显示错误,因为 this.get_details() 不是函数
    • 请更新您的问题并显示get_details 函数定义
    • 更新了问题
    猜你喜欢
    • 1970-01-01
    • 2012-12-27
    • 2015-01-27
    • 1970-01-01
    • 2013-03-07
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多