如何在Odoo Owl组件中正确使用standardFieldProps的值?
问题分析与解决
你犯了一个关键错误:把属性定义对象当成了实际传入的组件props来使用。
问题根源
standardFieldProps是Odoo提供的字段组件的属性规则描述,它用来定义组件可以接收哪些props、每个props的类型、默认值等,比如它的内部结构大概是这样的:
export const standardFieldProps = { value: { type: [String, Number, Boolean, Object], optional: true, default: true }, record: { type: Object, optional: false }, // 其他字段属性定义... };
你直接把这个规则对象存到useState里,state.props.value取到的自然是规则里value字段的默认值true,而不是视图传入的实际JSON字段值。
正确做法
初始化状态时使用实际传入的props
组件运行时的真实props是this.props,要把它的value存入状态:import { useState } from "@odoo/owl"; import { standardFieldProps } from "@web/views/fields/standard_field_props"; class MyField extends Component { static props = standardFieldProps; // 这一步是对的:用规则定义组件接收的props setup() { // 把实际传入的props.value存入状态 this.state = useState({ fieldValue: this.props.value }); } }同步props更新(可选)
如果字段值可能在组件生命周期中变化,需要在onPropsUpdate钩子中同步状态:onPropsUpdate(nextProps) { if (nextProps.value !== this.props.value) { this.state.fieldValue = nextProps.value; } }模板中使用状态值
之后在模板里就可以用处理后的状态值了:<pre t-esc="state.fieldValue" class="bg-primary text-white p-3 rounded"/>
这样就能拿到正确的JSON字段值,而不是true了。
内容的提问来源于stack exchange,提问作者kpg
相关产品推荐
相关产品推荐

