• odoo javascript参考(五)


    Translation management(翻译管理)
    一些翻译是在服务器端进行的(基本上是由服务器呈现或处理的所有文本字符串), 但是本地静态文件中有一些字符串也需要翻译。目前的工作方式如下:

    • 每个翻译的字符串被_t标记(可在JS模块web.core中获得)
    • 服务器使用这些字符串生成适当的PO文件
    • 每当加载web client时,它都会调用路由 /web/webclient/translations,返回所有可翻译术语的列表
    • 在运行时,每当调用函数_t时,系统都会在列表中查找对应的翻译,如果没有找到,则返回原始字符串
      javascript中的翻译有两个重要功能:_t和_lt。不同之处在于_lt是延时加载的。
    var core = require('web.core');
    
    var _t = core._t;
    var _lt = core._lt;
    
    var SomeWidget = Widget.extend({
        exampleString: _lt('this should be translated'),
        ...
        someMethod: function () {
            var str = _t('some text');
            ...
        },
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这个例子中, _lt是必须的,因为当模块加载完翻译并没有就绪。
    注意:参数中给定的字符串不应是动态的
    Session
    web client提供了一个特定的模块,其中包含一些特定于用户当前会话的信息。值得注意的关键是:

    • uid: 当前用户的 ID
    • user_name: 用户名,是一个字符串
    • user上下文 (user ID, language and timezone)
    • partner_id: 与当前用户关联的合作伙伴(partner)的ID
    • db: 当前使用的数据库的名字
      添加信息到 session
      当/web路由被加载,服务器将在模板中注入一些会话信息,即脚本标记. 信息将从模型ir.http的方法session_info中读取,所以,如果想添加一个特定的信息,可以通过重写session_info方法并将其添加到字典中来实现.
      在这里插入图片描述
    from odoo import models
    from odoo.http import request
    class IrHttp(models.AbstractModel):
        _inherit = 'ir.http'
    
        def session_info(self):
            result = super(IrHttp, self).session_info()
            result['some_key'] = get_some_value_from_db()
            return result
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    现在,通过在会话中读取,可以在javascript中获得该值

    var session = require('web.session');
    var myValue = session.some_key;
    ...
    
    • 1
    • 2
    • 3

    注意: 该机制旨在减少web客户端准备就绪所需的通信量.它更适合于计算成本较低的数据,以及初始化过程需要的数据。

    视图
    “视图”一词有不止一个含义。本节是关于视图的javascript代码的设计,而不是arch的结构或其他任何内容。
    在2017年, Odoo用新的架构替换了以前的视图代码. 主要是将渲染逻辑与模型逻辑分离.
    视图包括四个方面的内容: a View, a Controller, a Renderer and a Model.
    对应的API分别是: AbstractView, AbstractController, AbstractRenderer and AbstractModel classes.
    在这里插入图片描述

    • View(视图)像是一个工厂. 它的工作是获取一组fields,arch,然后构造一个Controller/Renderer/Model的三元组合。
      View的作用是正确设置MVC模式的每一部分.请注意,视图是一个类,而不是widget。一旦它的工作完成,它就可以被丢弃不用。

    • Renderer(渲染器)的工作就是渲染. 每个视图都可以以不同的方式渲染数据,它应该监听适当的用户操作,并在必要时通知其parent(Controller)渲染器是MVC模式中的V.

    • Model(模型):它的任务是获取并保持视图的状态. 通常, 它以某种方式表示数据库中的一组记录。 模型是“业务数据”的所有者,它是MVC中的M.

    • Controller(控制器):它的工作是协调渲染器和模型. 此外,它是web client其余部分的主要入口点. 例如, 当用户更改了一些search视图的内容, 将使用适当的信息调用控制器的更新方法.它是MVC中的C.
      Field Widgets(字段widget)
      web client应用的很大一部分是关于如何创建和编辑数据的,其中的大部分工作都是在字段 widget的帮助下完成, ODOO知道字段类型以及应如何显示和编辑值的具体细节。

    AbstractField
    AbstractField 是视图中所有widget的基类,因为所有视图都支持它们(目前支持:Form,List,Kanban)
    ODOO v11版本字段窗口widget与以前的版本有很多不同。让我们关注最重要的一点:
    widgets在所有视图类型之间共享,不再需要复制实现,请注意,可以通过加前缀的方式为视图提供特定版本的widget,list.many2one 将优先于 many2one.
    widget不再是字段值的所有者。它们仅表示数据并与视图的部分通信.
    这些widget不再需要能够在编辑和只读模式之间切换. 现在, 当需要这样的更改时,widget将被销毁并再次重新发布。
    字段widget可以在视图之外使用. 他们的API有点难以处理,但在设计上是独立的.
    Decorations(修饰)
    例如list视图,字段widgets支持简单的修饰
    目标是有一种简单的方法来根据记录的当前状态指定文本颜色. 例如,

    <field name="state" decoration-danger="amount < 10000"/>
    
    • 1

    在这里插入图片描述
    有效的修饰名称包括:
    decoration-bf
    decoration-it
    decoration-danger
    decoration-info
    decoration-muted
    decoration-primary
    decoration-success
    decoration-warning
    每个decoration-X将映射到css类text-X,它们是标准的bootstrap css 类 (text-it and text-bf除外, 由ODOO处理,分别对应斜体和粗体). 注意,Note 修饰属性的值应该是有效的python表达式.

                         中亿丰数字集团有限公司  姜振建
    
    • 1
  • 相关阅读:
    每个程序员应该都有个阿里梦
    【模型训练】YOLOv7反光衣检测
    【进入游戏行业选游戏特效还是技术美术?】
    CSRF 002
    编程前置:句子联想游戏
    「学习笔记」扫描线
    使用阿里云RDS for SQL Server性能洞察优化数据库负载-初识性能洞察
    TenDB Cluster 简介
    旅游网站毕业设计,旅游网站网页设计设计源码,旅游网站设计毕业论文
    数据结构 - 链表详解一 - 链表的介绍
  • 原文地址:https://blog.csdn.net/weixin_44565926/article/details/126013938