odoo17核心概念view7——listview总体框架分析

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

这是view系列的第七篇文章,今天主要介绍我们最常用的list视图。
odoo17核心概念view7——listview总体框架分析,odoo17,odoo,view,odoo17

1、先看list_view,这是主文件

/** @odoo-module */

import { registry } from "@web/core/registry";
import { RelationalModel } from "@web/model/relational_model/relational_model";
import { ListArchParser } from "./list_arch_parser";
import { ListController } from "./list_controller";
import { ListRenderer } from "./list_renderer";

export const listView = {
    type: "list",
    display_name: "List",
    icon: "oi oi-view-list",
    multiRecord: true,
    Controller: ListController,
    Renderer: ListRenderer,
    ArchParser: ListArchParser,
    Model: RelationalModel,
    buttonTemplate: "web.ListView.Buttons",

    limit: 80,

    props: (genericProps, view) => {
        const { ArchParser } = view;
        const { arch, relatedModels, resModel } = genericProps;
        const archInfo = new ArchParser().parse(arch, relatedModels, resModel);

        return {
            ...genericProps,
            Model: view.Model,
            Renderer: view.Renderer,
            buttonTemplate: view.buttonTemplate,
            archInfo,
        };
    },
};

registry.category("views").add("list", listView);

跟formview基本一样的格式,只是结构体里面少了compiler,可能是用了基类ViewCompiler。

2、ListController

跟表单控制有关的部分, 增删改查按钮,搜索框,分页等

3、ListRenderer

list主体内容的渲染,其实就是渲染了一个表格, 对list视图的扩展也大多是对它进行修改。我们来详细的看一看。

3.1 list_renderer.js

主题部分就不看了,看最后面的部分
注意,这里定义了4个模板。


ListRenderer.template = "web.ListRenderer";

ListRenderer.rowsTemplate = "web.ListRenderer.Rows";
ListRenderer.recordRowTemplate = "web.ListRenderer.RecordRow";
ListRenderer.groupRowTemplate = "web.ListRenderer.GroupRow";

3.2 list_renderer.xml

从 list_renderer.js中我们知道,xml文件里定义了4个模板。下面分别来分析一下。
web.ListRenderer
web.ListRenderer 定理了table的主体结构,包括三部分

  • thead 详细定义了头部
  • tbody 调用了子模板rowsTemplate ,也就是 “web.ListRenderer.Rows”;
  • tfoot 详细定义了尾部

看看tbody的调用方式, t-call 指令通过constructor.rowsTemplate 来调用ListRenderer.rowsTemplate,也就是 “web.ListRenderer.Rows”, 要学会这种调用方法,并且给子模板传递了一个变量list 它的值是props.list, 在web.ListRenderer.Rows模板中会用到这个变量。

 <tbody class="ui-sortable">
      <t t-call="{{ constructor.rowsTemplate }}">
          <t t-set="list" t-value="props.list"/>
      </t>
  </tbody>

web.ListRenderer.Rows
这个模板的结构也很简单,首先它会判断list的isGrouped属性,如果为假,说明没有分组,则通过foreach循环调用
web.ListRenderer.RecordRow 这个子末班,同时将record传递过去。 如果分组为真,则调用web.ListRenderer.GroupRow 模板,并传入group参数。
odoo17核心概念view7——listview总体框架分析,odoo17,odoo,view,odoo17
web.ListRenderer.RecordRow
这个模板渲染一行数据,通过foreach循环遍历所有的列

 <t t-foreach="getColumns(record)" t-as="column" t-key="column.id">
     <t t-if="column.type === 'field'">
         <t t-set="isInvisible" t-value="evalInvisible(column.invisible, record) or !(column.name in record.data)"/>
         <td t-on-keydown.synthetic="(ev) => this.onCellKeydown(ev, group, record)"
             class="o_data_cell cursor-pointer"
             t-att-class="getCellClass(column, record)"
             t-att-name="column.name"
             t-att-colspan="column.colspan"
             t-att-data-tooltip="!isInvisible ? getCellTitle(column, record) : false"
             data-tooltip-delay="1000"
             t-on-click="(ev) => this.onCellClicked(record, column, ev)" tabindex="-1">
             <t t-if="!isInvisible">
                 <t t-if="canUseFormatter(column, record)" t-out="getFormattedValue(column, record)"/>
                 <Field t-else="" name="column.name" record="record" type="column.widget" class="getFieldClass(column)" fieldInfo="column" t-props="getFieldProps(record, column)"/>
             </t>
         </td>
     </t>

4、list_arch_parser.js

arch解析器,不多说了

5、list_confirmation_dialog

顾名思义,对话框,还不知道怎么用,以后在补充吧文章来源地址https://www.toymoban.com/news/detail-767043.html

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

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

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

相关文章

  • odoo17 | Qweb模板简介

    到目前为止,我们的房地产模块的界面设计还相当有限。构建列表视图很简单,因为只需要字段列表。表单视图也是如此:尽管使用了几个标签,如 group标签或 page标签 ,但在设计方面几乎没什么可做的。 然而,如果我们想为我们的应用程序提供独特的外观,就必须更进一步

    2024年01月18日
    浏览(36)
  • 方差分析的核心概念“方差分解“

    方差是统计学中用来衡量数据集合中数值分散或离散程度的一种统计量。它表示了数据点与数据集合均值之间的差异程度,即数据的分散程度。方差越大,表示数据点更分散,而方差越小,表示数据点更集中。 方差的计算公式如下:   需要注意的是,总体方差的计算中除以

    2024年02月09日
    浏览(30)
  • 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日
    浏览(41)
  • Odoo17入门教程第六章 UI

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

    2024年04月23日
    浏览(46)
  • 【Spring Security系列】一文带你了解权限框架与Spring Security核心概念

    权限框架是软件开发中用于管理 用户权限和访问控制 的工具。在企业或者我们毕设复杂的系统中,不同的用户或角色需要拥有不同的访问和操作权限,以确保系统的安全性和数据完整性。今天我们就讨论一下Java中的安全框架! 在企业的开发中,Spring Security,Shiro都是比较流

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

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

    2024年02月03日
    浏览(47)
  • 安装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日
    浏览(36)
  • 揭秘Elasticsearch:一文读懂分布式搜索与分析引擎的核心概念

            Elasticsearch 是一个开源、分布式、实时搜索和分析引擎,专门用于处理大规模数据的快速检索与分析。它建立在 Apache Lucene 的基础上,但提供了比 Lucene 更为丰富的功能和友好的RESTful API 接口,使得开发者能够轻松地进行全文搜索、结构化搜索以及对海量数据进行

    2024年02月19日
    浏览(49)
  • 【框架源码】SpringBoot核心源码解读之启动类源码分析

    首先我们要先带着我们的疑问,spring boot是如何启动应用程序?去分析SpringBoot的启动源码。 我们在新建SpringBoot项目时,核心方法就是主类的run方法。 SpringApplication.run(ArchWebApplication.class, args) 我们点击run方法进入到源码中,这块传入的了一个我们当前程序主类的类对象以及主

    2024年02月06日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包