Odoo 14 中的 OWL - 扩展和修补现有的 OWL 组件。

OWL 组件介绍

OWL 组件与通常的 Odoo JS 类大不相同,它们具有您熟悉的自定义继承系统。

首先它们是ES6 类,如果您不熟悉 ES6 类,可以先学习ES6的内容

ES6 类基本上是 JavaScript 中现有的基于原型的继承的语法糖。在最基本的层面上,ES6 Class 是一个符合基于原型继承的构造函数。ES6 类仍然有 Object.prototype!

基于类和基于原型的继承之间最重要的区别在于,类定义了可以在运行时实例化的类型,而原型本身就是一个对象实例。

要使用 Odoo 14 现有的 OWL 组件,先了解一些基本的概念。

class Component {
  constructor(name) {
    this.name = name;
  }

  render() {
    console.log(`${this.name} renders itself.`);
  }
    
  // Getter/setter methods are supported in classes,
  // similar to their ES5 equivalents
  get uniqueId() {
    return `${this.name}-test`;
  }
}

可以使用关键字继承类 extends 并用 super 调用父函数。

class MyBetterComponent extends Component {
  constructor(name) {
    super(name); // call the super class constructor and pass in the name parameter
  }

  render() {
    console.log(`${this.name} with id ${this.uniqueId} render itslef better.`);
  }
}

let comp = new MyBetterComponent('MyBetterComponent');
comp.render(); // MyBetterComponent with id

这是标准的 ES6 super 关键字,不要将它与_super 框架内构建的 Odoo函数混淆。

Odoo 中 OWL 组件的大部分修补、扩展、覆盖都会用到这些基础知识!

你可能感兴趣的