odoo的assets详述

  • Post author:
  • Post category:其他


一、assets

在 Odoo 中管理资产(assets)并不像在其他一些应用程序中那样简单。原因之一是我们有多种场景需要不同的assets。例如,网络客户端、销售点应用程序、网站甚至移动应用程序的需求是不同的。此外,一些assets可能很大,但很少需要:在这种情况下,我们可能希望它们被延迟加载(按需)。

1、assets类型

共有三种不同的类型:代码(js文件)、样式(css或scss 文件)和模板(xml文件)。


js代码


Odoo 支持三种不同的 javascript 文件。一是系统处理所有这些文件(原生 JS 模块转换为 odoo 模块),二是压缩(可通过debug=assets mode解压缩)并连接。三是将结果保存为文件附件。这些文件附件通常通过页面部分中的

'assets': {
    'web.assets_backend': [
        'web/static/src/xml/**/*',
    ],
    'web.assets_common': [
        'web/static/lib/bootstrap/**/*',
        'web/static/src/js/boot.js',
        'web/static/src/js/webclient.js',
    ],
    'web.qunit_suite_tests': [
        'web/static/src/js/webclient_tests.js',
    ],
},

以下是一些常用且什么重要的捆绑:

web.assets_common: 此捆绑包包含 Web 客户端、网站和销售点常用的大多数assets。还包含 odoo 框架的较低级别的构建模块。它还包含 boot.js定义 odoo 模块系统的文件。
web.assets_backend: 此捆绑包包含特定于 Web 客户端的代码(特别是 Web 客户端/操作管理器/视图)
web.assets_frontend: 这个捆绑包是关于公共网站的所有特定内容:电子商务、门户、论坛、博客 …
web.assets_qweb: 后端环境和销售点中使用的所有静态 XML 模板
web.qunit_suite_tests: 所有 javascript qunit 测试代码(测试、助手、模拟)
web.qunit_mobile_suite_tests: 移动特定的 qunit 测试代码

操作

通常情况下,管理资产比较简单:只需增加一些新的文件到一个经常使用的绑定如 assets_common 或 assets_backend.,但也有一些交互操作。

在进行相关操作时,如. before, after, replace 和 remove,需要提前声明这些文件, 无论是在manifests时处于较高的层次或者在ir.asset记录处于较低的层级。


append


此操作添加一个或多个文件。既然是最常用的操作,简单的使用文件名就可以了:

'web.assets_common': [
    'my_addon/static/src/js/**/*',
],

默认情况下,将简单字符串添加到包中会将匹配 glob 模式的文件附加到包的末尾。


prepend


在包的开头添加一个或多个文件。

当需要将某个文件放在包中的其他文件之前(例如使用 css 文件)时很有用。使用以下语法调用该prepend操作:.(‘prepend’, )

‘web.assets_common’: [

(‘prepend’, ‘my_addon/static/src/css/bootstrap_overridden.scss’),

],


before


在特定文件之前添加一个或多个文件。

在包的开头添加文件可能不够精确。该 before指令可用于在目标文件之前添加给定文件。它是通过用 3 元素元组替换正常路径来声明的 。(‘before’, , )

‘web.assets_common’: [

(‘before’, ‘web/static/src/css/bootstrap_overridden.scss’, ‘my_addon/static/src/css/bootstrap_overridden.scss’),

],


after


在特定文件之后添加一个或多个文件。

与 相同before,匹配文件紧跟在目标文件之后。它是通过用 3 元素元组替换正常路径来声明的 。(‘after’, , )

‘web.assets_common’: [

(‘after’, ‘web/static/src/css/list_view.scss’, ‘my_addon/static/src/css/list_view.scss’),

],


include


使用嵌套,将文件揉进捆绑包。

如下所示:(‘include’, )

‘web.assets_common’: [

(‘include’, ‘web._primary_variables’),

],


remove


删除一个或多个文件。

在某些情况下,您可能希望从包中删除一个或多个文件。这可以remove通过指定一对使用指令 来完成:(‘remove’, )

‘web.assets_common’: [

(‘remove’, ‘web/static/src/js/boot.js’),

],


replace


用一个或多个文件替换asset文件。

当一个asset不仅需要被删除,而且您还想在相同的位置插入该asset的新版本。这可以通过replace使用 3 元素元组的指令来完成:(‘replace’, , )

‘web.assets_common’: [

(‘replace’, ‘web/static/src/js/boot.js’, ‘my_addon/static/src/js/boot.js’),

],


加载顺序


加载资源的顺序有时很关键,主要用于样式表优先级和设置脚本。Odoo 中的asset处理如下:

当调用资产包时(例如t-call-assets=“web.assets_common”),会生成一个空的asset列表

与捆绑包匹配的所有类型的记录ir.asset都被提取并按序列号排序。然后,所有序列严格小于 16 的记录都将被处理并应用于当前asset列表。

所有在其清单中为所述捆绑声明asset的模块都将其asset操作应用于此列表。这是按照模块依赖的顺序完成的(例如,web asset在之前处理website)。如果指令尝试添加列表中已经存在的文件,则不会对该文件执行任何操作。换句话说,只有第一次出现的文件被保存在列表中。

剩余的ir.asset记录(序列大于或等于 16 的记录)也会被处理和应用。

清单中声明的​​资产可能需要以特定顺序加载,例如jquery.js在加载 lib 文件夹时必须在所有其他 jquery 脚本之前加载。一种解决方案是创建具有较低序列或“前置”指令的ir.asset 记录,但还有另一种更简单的方法。

由于保证了资产列表中每个文件路径的唯一性,因此您可以在包含它的 glob 之前加载任何特定文件。因此,该文件将在 glob 中包含的所有其他文件之前出现在列表中。

‘web.assets_common’: [

‘my_addon/static/lib/jquery/jquery.js’,

‘my_addon/static/lib/jquery/**/*’,

],


延迟加载


动态加载文件和/或资产包有时很有用,例如仅在需要时才加载库。为此,Odoo 框架提供了一些帮助函数,位于@web/core/assets.

await loadAssets({


jsLibs: [“/web/static/lib/stacktracejs/stacktrace.js”],

});

在这里插入图片描述


资产模型 ( ir.asset)


在大多数情况下,清单中声明的​​asset基本上就足够了。然而,为了获得更大的灵活性,该框架还支持在数据库中声明动态asset。

通过创建ir.asset记录来完成。这些将像在模块清单中找到一样被处理。

类: odoo.addons.base.models.ir_asset.IrAsset

name

资产记录的名称(用于识别目的)。

bundle

将在其中应用资产的捆绑包。

directive(默认= append)

此字段确定path(target如果需要)将如何解释。以下是可用指令及其所需参数的列表:

append:path

prepend:path

before: target,path

after: target,path

incloud:(path解释为捆绑名称)

remove :(path解释为要移除的目标资产)

replace:target,path

target

目标文件以指定捆绑包中的位置。只能与指令和replace.一起使用。before,after

active(默认= True)

记录是否处于活动状态

sequence(默认= 16)

资产记录的加载顺序(升序)。低于 16 的序列意味着asset将在清单中(manifest)声明的​之前处理。

                                                            中亿丰数字集团  姜振建



版权声明:本文为weixin_44565926原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。