Odoo Field Widget 入坑指南(二)

在上一章中,我们以odoo自带的 TimePicker 挂件为例子,介绍了odoo前端框架的基本工作原理。其中,最为核心的是介绍了odoo的前端注册表功能,此功能有效地把页面中的触发按钮与函数连接在了一起。

那么,本章将对这些函数的具体定义与执行方式进行详细介绍。

首先,让我们观察一个计数器小挂件。

上面这段代码中,函数被标记为两种颜色,分别是红色与黄色。其中,红色部分是告诉odoo,本代码将继承Widget组件并生成一个副本,此新副本将使用名为 some.template的渲染模板。

那么这里就给新入坑的同学出了一道难题,渲染模板是什么?

其实,这个问题很简单。odoo的本质,是一个模板引擎。它将根据开发人员所配置的参数来自动生成相应的 HTML\CSS 等文件,以减少开发人员的重复劳动。与此同时,模板的另一个好处是,用户的在线操作可以动态修改当前元素,而无需与服务器连接。

接下来,我们将讨论Widget 定义中的另外一个核心部分, event 标签。

宏观上来讲,event 标签是一个 JQuery对象,它可以是 JQuenry 中已经定义好的函数。例如,button 这个元素。它在JQuery 中已经有准确的定义.所以,odoo系统可以直接调用此定影,而不需要再次对它进行声明。

那么,这一设计的好处是什么呐?总所周知,前端开发的核心是减少代码的使用量,来提高浏览器的访问速度。就odoo而言,利用已有的函数定义,减少冗余代码量,就是一个非常有效的方法。因此,开发人员需要做的,仅仅是对已有函数动作进行配置,而不需要重复制造轮子。例如,_onClick函数。

从上面代码可以看到,此函数作用是在用户点击时,自动累加。其中 $ 中代表需要定位的元素名称,text 表示元素类型。

为了验证这段代码的可修改性,我们人为将 Click 动作修改成了 keydown 动作,以此让用户按下“键盘下键”时,执行函数。

然而,并没有成功。

为什么?这是因为keydown 这个动作,已在其他函数中被定义,odoo注册表中存在冲突 。根据odoo的逻辑,odoo将执行之前的定义,而忽略这一新定义。因此,在修改已有方法时,需要增加_super 标签,来表达此函数为最优先级。

另一方面,因为我们没有对 keydown这个元素的css选择器进行定义,odoo将自动把此元素目标为Widget对象中DOM的根结构里。因此,执行按键时,并无法看到累加效果的体现。

综上,本文对Widget中的模板引擎和函数工作原理进行了解释。实际操作中,仍然有大量需要依靠经验来完成的内容。希望大家可以共同探索,相互学习!

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值