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

打印 上一主题 下一主题

主题 1014|帖子 1014|积分 3042

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
概要

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



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

解决办法:就是在前端组件中(owl组件),引用官方的useSelectCreate钩子函数。
  1. /** @odoo-module **/
  2. import { Component } from "@odoo/owl";
  3. import { useSelectCreate } from "@web/views/fields/relational_utils";
  4. export class Demo extends Component {
  5.     setup() {
  6.         const selectCreate = useSelectCreate({
  7.             resModel: "product.product",
  8.             activeActions: {
  9.                 create:false,
  10.                 createEdit:true,
  11.                 delete:true,
  12.                 link:true,
  13.                 onDelete:()=>{console.log("删除成功");},
  14.                 type:'many2many',
  15.                 unlink:true,
  16.                 write:false,
  17.             },
  18.             onSelected: (resIds) => {console.log("选中", resIds);},
  19.             onCreateEdit: () => {console.log("创建成功");},
  20.             onUnselect: true,
  21.         });
  22.         this.selectCreate = (params) => {
  23.             return selectCreate(params);
  24.         };
  25.     }
  26.     //在视图增加一个事件测试就可以了
  27.     ceshi(){
  28.         let context = {
  29.             tree_view_ref: "product.product_product_tree_view",
  30.         };
  31.         const productName = 'GG boy';
  32.         const title = _t("Add line: %s", productName);
  33.         const domain = [];
  34.         return this.selectCreate({ domain, context, title });
  35.     }
  36. }
复制代码
 钩子函数源码:
  1. export function useSelectCreate({ resModel, activeActions, onSelected, onCreateEdit, onUnselect }) {
  2.     const addDialog = useOwnedDialogs();
  3.     function selectCreate({ domain, context, filters, title }) {
  4.         addDialog(SelectCreateDialog, {
  5.             title: title || _t("Select records"),
  6.             noCreate: !activeActions.create,
  7.             multiSelect: "link" in activeActions ? activeActions.link : false, // LPE Fixme
  8.             resModel,
  9.             context,
  10.             domain,
  11.             onSelected,
  12.             onCreateEdit: () => onCreateEdit({ context }),
  13.             dynamicFilters: filters,
  14.             onUnselect,
  15.         });
  16.     }
  17.     return selectCreate;
  18. }
复制代码
由源码看出,控制能不能多选的属性是activeActions中的line,为真则可以多选。剩下的就是业务逻辑处理了,可以根据他们的回调函数举行前端页面开发了。
小结

        多写多敲多思考,毕竟,知己知彼才能看懂源码。
Tip:本人才学尚浅,如有纰漏,还请不吝见教!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

民工心事

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表