很多术语从表面上看起来非常深奥, 解释起来可能也会非常麻烦,但往往从代码上可以很简单的洞悉其本质。 先看这个函数的实现
function useSubEnv(nextEnv) {
const component = Component.current;
component.env = Object.assign(Object.create(component.env), nextEnv);
}
看得出来,本质就是对component的env进行了扩展。 而文档上面讲这个会传播到component的子组件, 那我再看看compoent的构造函数
*/
constructor(parent, props) {
Component.current = this;
let constr = this.constructor;
const defaultProps = constr.defaultProps;
if (defaultProps) {
props = props || {};
this.__applyDefaultProps(props, defaultProps);
}
this.props = props;
if (QWeb.dev) {
QWeb.utils.validateProps(constr, this.props);
}
const id = nextId++;
let depth;
if (parent) {
this.env = parent.env;
const __powl__ = parent.__owl__;
__powl__.children[id] = this;
depth = __powl__.depth + 1;
}
代码中可以看得出this.env = parent.env; 实际上子组件就是使用了父组件的env,所以,这个env当然会向下传播。
加群免费参加odoo后端培训,群内不定时分享各种odoo知识