javascript - 如何在没有 RPC 的情况下在 Javascript 中获取 Odoo 记录?
问题描述
我正在开发和扩展 Odoo 14 中的 POS。
我创建了一个新屏幕,可以在其中查看pos.order中处于草稿状态的所有记录。
在我的 javascript 文件中,我创建了屏幕并尝试通过我的自定义函数获取记录。
JS 文件:
odoo.define('opens_pos_order.UnpaidOrdersScreen', function(require) {
'use strict';
const PosComponent = require('point_of_sale.PosComponent');
const ProductScreen = require('point_of_sale.ProductScreen');
const {useListener} = require('web.custom_hooks');
const Registries = require('point_of_sale.Registries');
const models = require('point_of_sale.models');
var rpc = require('web.rpc')
class UnpaidOrdersScreen extends PosComponent {
constructor() {
super (... arguments);
var orders = rpc.query({
model: 'pos.session',
method: 'get_unpaid_orders',
args: [this.env.pos.pos_session.id]
}).then(function (data) {
return data;
});
var res = orders.then(data => console.log(data));
console.log(res)
this.orders = res;
};
back() {
this.trigger('close-temp-screen');
}
}
UnpaidOrdersScreen.template = 'UnpaidOrdersScreen';
Registries.Component.add(UnpaidOrdersScreen);
return UnpaidOrdersScreen;
});
这里的问题是,使用 RPC,返回的是一个 Promise 对象,所以我的变量this.orders无法得到我的预期结果。
我在python中的功能是这样的:
from odoo import api, fields, models, _
from odoo.exceptions import AccessError, UserError, ValidationError
import json
class PosSession(models.Model):
_inherit = 'pos.session'
@api.model
def get_unpaid_orders(self, session_id=None):
res = []
orders = self.env['pos.order'].search([('session_id', '=', session_id), ('state', '=', 'draft')])
for order in orders:
o = {
'id': order.id,
'name': order.name,
'price': order.amount_total,
}
res.append(o)
return json.dumps(res)
这个想法是我可以看到这个 xml 文件中的所有记录:
<?xml version="1.0" encoding="UTF-8"?>
<templates id="template" xml:space="preserve">
<t t-name="UnpaidOrdersScreen" owl="1">
<div class="clientlist-screen screen">
<div class="screen-content">
<div class="top-content">
<div class="button back" t-on-click="back">
Back
</div>
</div>
<section class="full-content">
<div class="client-window">
<section class="subwindow list">
<div class="subwindow-container">
<div class="subwindow-container-fix scrollable-y">
<table class="client-list">
<thead>
<tr>
<th> Name </th>
<th> Orders </th>
</tr>
</thead>
<tbody>
<t t-foreach="categories" t-as="categ" t-key="categ.id">
<tr>
<td> <t t-esc="categ.name"/> </td>
</tr>
</t>
</tbody>
</table>
</div>
</div>
</section>
</div>
</section>
</div>
</div>
</t>
</templates>
有没有其他方法可以从 Javascript 中的表中获取记录?或者我怎么能从我的函数中返回一个非 Promise 对象?
解决方案
我认为如果您在单独的方法中异步调用它,它可能会起作用。请试试这个。
class UnpaidOrdersScreen extends PosComponent {
constructor() {
super (... arguments);
var orders = this.get_orders()
var res = orders.then(data => console.log(data));
console.log(res)
this.orders = res;
};
back() {
this.trigger('close-temp-screen');
}
async get_orders(){
var result = await this.rpc({
model: 'pos.session',
method: 'get_unpaid_orders',
args: [this.env.pos.pos_session.id]
})
return result
}
}
推荐阅读
- laravel - Laravel - 如何验证唯一规则请求是否区分大小写
- r - 如何修复 dplyr 包中的汇总函数错误?
- flutter - Dart-lang,我如何映射列表
列出 结合元素? - tensorflow - KubeFlow 上的 TFServing 和 KFServing 有什么不同
- node.js - 当流量通过 Cloudflare 路由时,WebSocket 连接从未完全建立
- django - 如何在 Django 中加载引导程序?
- python - read_csv 读取值包含在另一个数据框的列中的行
- python - 如何在 Python 中获得负十进制数的十进制平方根?
- java - QueryString 用冒号搜索字符串
- javascript - 计数和比较