想法很简单,我想以有序列表的形式展示one2many中的所有数据:
就这么简单。应该这么简单,但我已经浪费了10个小时,仍然没有成功的迹象:(
这是我的js:
odoo.define('obki.accordion_widget', function (require) {
'use strict';
var core = require('web.core');
var AbstractField = require('web.AbstractField');
var field_registry = require('web.field_registry');
var QWeb = core.qweb;
var AccordionWidget = AbstractField.extend({
// The template for the widget
template: 'AccordionWidget',
supportedFieldTypes: ['one2many'],
// Render the widget
_render: function () {
var info = this.value;
console.log('######### info: ', info);
debugger; //it's not even executed
this.$el.text('Accordion Widget Content'); // Display the Accordion name
},
});
// Register the widget
field_registry.add('accordion_widget', AccordionWidget);
// return AccordionWidget;
return {
AccordionWidget: AccordionWidget,
};
});
这是我的 XML:
<t t-name="AccordionWidget" owl="1">
<ol>
<t t-foreach="record.tac_ids" t-as="line">
<li>
<div><t t-esc="line.name"/></div>
</li>
</t>
</ol>
</t>
结果始终是:“缺少小部件:文本类型字段的 Accordion_widget”
我尝试从另一个 3rd_party 插件复制另一个代码,如下所示:
/** @odoo-module **/
import { registry } from '@web/core/registry';
import { X2ManyField } from '@web/views/fields/x2many/x2many_field';
export class Accordion extends X2ManyField {
}
Accordion.template = 'AccordionWidget';
registry.category('fields').add('accordion_widget', Accordion);
看起来工作正常,小部件已注册并显示在表单上。但不幸的是,我不知道如何访问数据。如何读取field_ids数据?我已经尝试过 this.field_ids、props.field_ids、props.record、props.everything,但没有任何效果。
请帮忙...:')
one2many 行应该可以使用以下方式访问:
this.props.value.records
错误是从遗留字段注册表引发的,请尝试以下代码(第一个示例已升级):
组件:
/** @odoo-module **/
import { registry } from "@web/core/registry";
import { Component } from "@odoo/owl";
const fieldRegistry = registry.category("fields");
export class AccordionWidget extends Component {
}
AccordionWidget.template = "AccordionWidget"
AccordionWidget.supportedTypes = ["one2many"];
// Register the widget
fieldRegistry.add('accordion_widget', AccordionWidget);
模板:
<t t-foreach="this.props.value.records" t-as="line" t-key="line_index">
<li>
<div><t t-esc="line.data.name"/></div>
</li>
</t>
t-key
属性为必填项