彭笑晚 发表于 2023-2-20 02:57:54

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

实践环境

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:
            }).then(function (res) {
                // ...此处代码已省略
            });
             ...
            this._super.apply(this, arguments);
      }

        });
    // ...此处代码已省略
});那问题来了,如果希望在普通的javascript函数中使用上述请求功能,咋办?参考如下示例代码
示例代码
function do_confirm_action(modelName, modelMethod){
    $("button").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:
    }).then(function (res) {
      if (res == true) {
            wizard_dialog.css('display', 'none');
            window.sessionStorage.removeItem(dataUUID);
      } else {
            $("button").attr("disabled", false);
      }
    }).catch(function (err) {
      $("button").attr("disabled", false);
    });

}
来源:https://www.cnblogs.com/shouke/p/17094265.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Odoo 通过Javascript调用模型中自定义方法