Odoo OWL组件调用rpc服务报错:Service rpc is not available 求助
解决Odoo OWL组件调用RPC服务时"Service rpc is not available"错误
出现这个错误的核心原因是你的OWL组件没有处于Odoo Web客户端的服务容器上下文当中,以下是具体解决步骤:
1. 确保组件在Odoo模块资产中正确注册
如果是在自定义Odoo模块中开发组件,需要将组件的JS文件添加到模块的__manifest__.py资产配置里,让Odoo加载时将组件纳入Web客户端上下文:
'assets': { 'web.assets_backend': [ # 替换为你的组件JS文件实际路径 'devolive_review/static/src/js/review_under_name.js', ], },
2. 通过Odoo框架机制加载组件
不能在独立环境(比如单独HTML页面)直接挂载组件,必须通过Odoo的视图、Action或Widget机制初始化组件,这样Odoo才会自动注入包括rpc在内的核心服务。
3. 独立测试环境的特殊处理(本地单独测试时)
如果需要在Odoo外部测试组件,必须手动构建服务容器并注册rpc服务:
import { Component, mount } from "@odoo/owl"; import { useService } from "@web/core/utils/hooks"; import { rpc } from "@web/core/network/rpc"; import { services } from "@web/core/services"; // 手动构建包含rpc服务的容器 const container = { services: { ...services, rpc: { dependencies: [], async start() { return rpc; }, }, }, }; export class ReviewUnderName extends Component { static template = "devolive_review.ReviewUnderName"; static props = {}; setup() { this.rpc = useService("rpc"); this.loadData(); } async loadData() { const response = await this.rpc(`/devolive/review/`); console.log("response", response); } } // 挂载时传入自定义容器 mount(ReviewUnderName, document.body, { container });
4. 验证后端路由正确性
同时要确保你调用的/devolive/review/路由已在后端正确注册,示例代码:
from odoo import http from odoo.http import request class ReviewController(http.Controller): @http.route('/devolive/review/', auth='user', type='json') def get_review_data(self): # 编写你的数据处理逻辑 return {"status": "success", "data": []}
内容的提问来源于stack exchange,提问作者olive007
相关产品推荐
相关产品推荐

