当前位置: 首页 > news >正文

【odoo17 | Owl】前端js钩子调用列表选择视图

概要

        在我们选择多对一或者多对多字段的时候,经常看到可以弹出列表弹窗让人一目了然的效果,效果如下:

         那么,这种效果是odoo本身封装好的组件,我们在平时的前端界面开发的时候,既不是后端视图的情况下,如何调出这种选择列表呢?

内容

解决办法:就是在前端组件中(owl组件),引用官方的useSelectCreate钩子函数。

/** @odoo-module **/
import { Component } from "@odoo/owl";
import { useSelectCreate } from "@web/views/fields/relational_utils";export class Demo extends Component {setup() {const selectCreate = useSelectCreate({resModel: "product.product",activeActions: {create:false,createEdit:true,delete:true,link:true,onDelete:()=>{console.log("删除成功");},type:'many2many',unlink:true,write:false,},onSelected: (resIds) => {console.log("选中", resIds);},onCreateEdit: () => {console.log("创建成功");},onUnselect: true,});this.selectCreate = (params) => {return selectCreate(params);};}//在视图增加一个事件测试就可以了ceshi(){let context = {tree_view_ref: "product.product_product_tree_view",};const productName = 'GG boy';const title = _t("Add line: %s", productName);const domain = [];return this.selectCreate({ domain, context, title });}
}

 钩子函数源码:

export function useSelectCreate({ resModel, activeActions, onSelected, onCreateEdit, onUnselect }) {const addDialog = useOwnedDialogs();function selectCreate({ domain, context, filters, title }) {addDialog(SelectCreateDialog, {title: title || _t("Select records"),noCreate: !activeActions.create,multiSelect: "link" in activeActions ? activeActions.link : false, // LPE FixmeresModel,context,domain,onSelected,onCreateEdit: () => onCreateEdit({ context }),dynamicFilters: filters,onUnselect,});}return selectCreate;
}

由源码看出,控制能不能多选的属性是activeActions中的line,为真则可以多选。剩下的就是业务逻辑处理了,可以根据他们的回调函数进行前端页面开发了。

小结

        多写多敲多思考,毕竟,知己知彼才能看懂源码。

Tip:本人才学尚浅,如有纰漏,还请不吝赐教!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 《昇思25天学习打卡营第25天|第28天》
  • 硅纪元视角 | 苹果AI训练数据大曝光,坚持用户隐私第一
  • C++(二叉树OJ题)
  • 【限免】频控阵雷达:概念、原理与应用【附MATLAB代码】
  • Windows搭建我的世界MC服务器 【Minecraft外网联机教程】
  • 轻松实现远程智能交互:OriginBot与钉钉和GPT4o的集成指南
  • 《计算机网络》(第8版)考研真题
  • Linux服务器安装Zabbix7.0客户端实战记录和问题记录
  • 批量打断相交线——ArcGIS 解决方法
  • Python 装饰器简单使用
  • 【设计模式】代理模式详解
  • TCP/IP 协议栈介绍
  • 什么是等保测评2.0,等保测评如何定级
  • Java面试八股之简述spring的自动装配
  • 2.1、matlab绘图汇总(图例、标题、坐标轴、线条格式、颜色和散点格式设置)
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • egg(89)--egg之redis的发布和订阅
  • ES6语法详解(一)
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • idea + plantuml 画流程图
  • JS函数式编程 数组部分风格 ES6版
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • ReactNativeweexDeviceOne对比
  • Solarized Scheme
  • Swift 中的尾递归和蹦床
  • vue 配置sass、scss全局变量
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 初探 Vue 生命周期和钩子函数
  • 基于Android乐音识别(2)
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 自定义函数
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #if #elif #endif
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (数据结构)顺序表的定义
  • (四)Android布局类型(线性布局LinearLayout)
  • (转)jQuery 基础
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .net Stream篇(六)
  • .net 发送邮件
  • .Net 执行Linux下多行shell命令方法
  • .net/c# memcached 获取所有缓存键(keys)
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • .py文件应该怎样打开?
  • @Controller和@RestController的区别?
  • @Data注解的作用
  • [ C++ ] STL---stack与queue
  • []常用AT命令解释()
  • [20170713] 无法访问SQL Server