odoo17核心概念view4——view.js

这篇具有很好参考价值的文章主要介绍了odoo17核心概念view4——view.js。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这是view系列的第四篇文章,专门介绍View组件。
作为一个Component,它总共包含js、css、xml三个标准文件,当然最重要的是view.js

首先在setup函数中对传入的参数props做了各种校验,然后扩展了subenv

        useSubEnv({
            keepLast: new KeepLast(),
            config: {
                ...getDefaultConfig(),
                ...this.env.config,
            },
            ...Object.fromEntries(
                CALLBACK_RECORDER_NAMES.map((name) => [name, this.props[name] || null])
            ),
        });

这个env只会传递给子组件。
然后调用了loadViews函数

 onWillStart(() => this.loadView(this.props));

在loadViews函数中,调用了viewService,然后viewService从后端加载了view(有缓存机制)

            const result = await this.viewService.loadViews(
                { context, resModel, views },
                { actionId: this.env.config.actionId, loadActionMenus, loadIrFilters }
            );

根据从后端返回的xml结构,代码会将xml解析成一个对象,并读取其中的属性,
下面这段代码中,读取了js_class属性,并将它设置为subType,如果设置了这个属性,系统会从views注册表中读取相关的描述符来代替默认的描述符。
描述符是一结构体(字典),我们经常用来对视图进行扩展,定义号之后需要在viewRegistry中注册它,这里才能嗲用到。

还有banner_route属性
sample属性不知道是干嘛的


        const archXmlDoc = parseXML(arch.replace(/ /g, nbsp));
        let subType = archXmlDoc.getAttribute("js_class");
        const bannerRoute = archXmlDoc.getAttribute("banner_route");
        const sample = archXmlDoc.getAttribute("sample");
        const className = computeViewClassName(type, archXmlDoc, [
            "o_view_controller",
            ...(props.className || "").split(" "),
        ]);

        // determine ViewClass to instantiate (if not already done)
        if (subType) {
            if (viewRegistry.contains(subType)) {
                descr = viewRegistry.get(subType);
            } else {
                subType = null;
            }
        }

后面的代码就是根据返回值在组装viewProps

        const viewProps = {
            info,
            arch: archXmlDoc,
            fields,
            relatedModels,
            resModel,
            useSampleModel: false,
            className,
        };

然后是准备WithSearch 组件的属性

 		const finalProps = descr.props ? descr.props(viewProps, descr, this.env.config) : viewProps;
       // prepare the WithSearch component props
        this.Controller = descr.Controller;
        this.componentProps = finalProps;
        this.withSearchProps = {
            ...toRaw(props),
            hideCustomGroupBy: props.hideCustomGroupBy || descr.hideCustomGroupBy,
            searchMenuTypes,
            SearchModel: descr.SearchModel,
        };

看看结尾的部分:


View.template = "web.View";
View.components = { WithSearch };
View.defaultProps = {
    display: {},
    context: {},
    loadActionMenus: false,
    loadIrFilters: false,
    className: "",
};
View.props = {
    "*": true,
};
View.searchMenuTypes = ["filter", "groupBy", "favorite"];

看看它的xml模板

  <t t-name="web.View">
      <WithSearch t-props="withSearchProps" t-slot-scope="search">
        <t t-component="Controller"
          t-on-click="handleActionLinks"
          t-props="componentProps"
          context="search.context"
          domain="search.domain"
          groupBy="search.groupBy"
          orderBy="search.orderBy"
          comparison="search.comparison"
          display="search.display"/>
      </WithSearch>
  </t>

WithSearch 是一个虚拟组件,它本身不渲染任何东西,里面包括了一个动态组件Controller,这个其实就是各类视图的controller组件。 那render组件呢? 是controller组件的子组件吗? 这个问题留在后面去回答。

总结一波:
view组件通过viewService后缓存或者后端获取了view的信息,包括id,arch,model等,然后通过一个虚拟组件WithSearch 包裹了一个动态的controller组件,最终显示出来,那么view组件在哪里被调用的呢?这些疑问随着学习的深入我相信终究会找到答案。文章来源地址https://www.toymoban.com/news/detail-763815.html

到了这里,关于odoo17核心概念view4——view.js的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Ubuntu 20.04 安装Odoo17

    所有的 Nginx 配置文件都在/etc/nginx/目录下。 主要的 Nginx 配置文件是/etc/nginx/nginx.conf。 为每个域名创建一个独立的配置文件,便于维护服务器。你可以按照需要定义任意多的 block 文件。 Nginx 服务器配置文件被储存在/etc/nginx/sites-available目录下。在/etc/nginx/sites-enabled目录下的配

    2024年02月04日
    浏览(37)
  • Odoo17入门教程第六章 UI

    现在我们已经创建了新模型及其 相应的,是时候了 与用户界面交互。 在本章结束时,我们将创建几个菜单以访问默认列表 和窗体视图。 参考 :与此主题相关的文档可以在数据文件中找到。 在第五章:安全性-简介中,我们通过 CSV 文件添加了数据。CSV 当要加载的数据具有

    2024年04月23日
    浏览(46)
  • odoo的一些基础概念

    概述 三层体系结构,表示层是HTML5、JavaScript和CSS的组合,逻辑层专门用Python编写,而数据层只支持PostgreSQL作为RDBMS。 服务器和客户端扩展都打包为模块,可选地加载到数据库中。模块是针对单一目的的函数和数据的集合。Odoo中的一切都以模块开始和结束 开启调试模式 http

    2024年02月03日
    浏览(46)
  • 安装odoo17 Windows版时,PostgreSQL Database无法被勾选

    安装odoo17 Windows版时,PostgreSQL Database无法被勾选。 出现的原因是,曾经安装过PostgreSQL Database;虽然可能已被卸载,但注册表内还有残余信息,导致odoo认为PostgreSQL Database仍存在于系统之中。 删除注册表内的postgreSQL中的Installations。 具体步骤: 打开注册表; 定位至: 计算机

    2024年02月05日
    浏览(36)
  • Ubuntu和windows系统下安装odoo17 社区版和企业版

    先看图和以前比较起来最大的改变就是界面 官方给的详细更新介绍 Odoo 17 Release Notes | Odoo 网上大家发表的一些体验: 前端的交互体验 个人角色交互体验比之前丝滑很多,比如各种便捷操作不用点到单据里面,任务的完成、添加协作者等。另外前端改动确实不错,让体验感更

    2024年02月05日
    浏览(35)
  • Android 从其他xml文件中获取View组件数据

    问题 Android Studio 我想在 trace.java 从setting.java绑定的页面activity_setting.xml中 的editview中获取数据 解决方案 仅适用于 在同一应用的不同组件之间共享数据 在 SettingActivity.java 中,当用户准备离开当前活动时,可以将 EditText 中的数据保存到一个全局变量或者共享的存储位置。常见

    2024年02月14日
    浏览(47)
  • SAP UI5 walkthrough step4 XML Views

    SAPUI5 指出多种VIEW类型,包括XML,HTML,JavaScript 推荐使用XML,因为可读性更高 我们提前介绍一下MVC架构。 MVC是一种软件架构模式,它包括三个主要组件:模型(Model)、视图(View)和控制器(Controller)。这三个组件分别负责处理应用程序的数据、用户界面和用户输入。MVC的设计

    2024年02月04日
    浏览(39)
  • Caused by: android.view.InflateException: Binary XML file line

    根据搜索以及分析,可以知道是因为 inflate layout file 时出错,那么可能的原因是: 自定义 View 类定义出错,常见的为少了构建函数: public MyView(Context context,AttributeSet paramAttributeSet) 。该错误是使用 com.google.android.material.card.MaterialCardView 时出错,所以不符合; 定义类引用为题

    2024年02月04日
    浏览(37)
  • Spring核心配置步骤-完全基于XML的配置

    Spring框架的核心配置涉及多个方面,包括依赖注入(DI)、面向切面编程(AOP)等。以下是一般情况下配置Spring应用程序的核心步骤: 1. **引入Spring依赖:** 在项目的构建工具(如Maven、Gradle)配置文件中,添加Spring框架的依赖。 2. **创建Spring配置文件:** 创建一个XML文件(通

    2024年02月11日
    浏览(36)
  • 【仿写tomcat】六、解析xml文件配置端口、线程池核心参数

    上一篇文章中我们用了Excutors创建了线程,这里我们将它改造成包含所有线程池核心参数的形式。 主方法中对多线程操作部分改为使用CompletableFuture执行 现在我们有一个server.xml文件,我想解析其中的端口号以及线程池参数 如果想完成这个功能可以直接使用java本身自带的工具

    2024年02月12日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包