Fields and Views
字段和视图是Odoo用户界面中最重要的概念之一。它们是许多重要用户交互的关键,因此应该完美地工作。在JavaScript框架的上下文中,字段是专门用于可视化/编辑给定记录的特定字段的组件。例如,(Python)模型可以定义一个char字段,该字段将由字段组件CharField表示。
字段组件基本上只是在字段注册表中注册的组件。字段组件可以定义一些额外的静态键(元数据),如displayName或supportedTypes,以及最重要的一个:extractrops,用于准备CharField接收的基本道具。
简单示例:
CharField的简化实现模板
<t t-name="web.CharField" owl="1">
<t t-if="props.readonly">
<span t-esc="formattedValue" />
</t>
<t t-else="">
<input
class="o_input"
t-att-type="props.isPassword ? 'password' : 'text'"
t-att-placeholder="props.placeholder"
t-on-change="updateValue"
/>
</t>
</t>
它具有只读模式和编辑模式,这是一个具有一些属性的输入。现在,这里是JavaScript代码:
export class CharField extends Component {
get formattedValue() {
return formatChar(this.props.value, { isPassword: this.props.isPassword });
}
updateValue(ev) {
let value = ev.target.value;
if (this.props.shouldTrim) {
value = value.trim();
}
this.props.update(value);
}
}
CharField.template = "web.CharField";
CharField.displayName = _lt("Text");
CharField.supportedTypes = ["char"];
CharField.extractProps = ({ attrs, field }) => {
return {
shouldTrim: field.trim && !archParseBoolean(attrs.password),
maxLength: field.size,
isPassword: archParseBoolean(attrs.password),
placeholder: attrs.placeholder,
};
};
registry.category("fields").add("char", CharField);
CharField以道具形式接收其(原始)值。它需要在显示之前对其进行格式化。
它在其道具中接收一个更新功能,字段使用该功能来通知状态的所有者该字段的值已更改。请注意,该字段不(也不应该)保持其值的局部状态。只要应用了更改,它就会通过道具的方式返回(可能是在更改后)。
它定义了一个extractOps函数。这是将特定于视图的通用标准道具转换为对组件有用的专用道具的步骤。这允许组件具有更好的API,并可以使其具有可重用性。
字段必须在字段注册表中注册。一旦完成,就可以通过使用小部件属性在某些视图(即:表单、列表、看板)中使用它们。
<field name="preview_moves" widget="account_resequence_widget"/>