马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
概要
在我们选择多对一大概多对多字段的时候,经常看到可以弹出列表弹窗让人一目了然的效果,效果如下:
那么,这种效果是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 Fixme
- resModel,
- context,
- domain,
- onSelected,
- onCreateEdit: () => onCreateEdit({ context }),
- dynamicFilters: filters,
- onUnselect,
- });
- }
- return selectCreate;
- }
复制代码 由源码看出,控制能不能多选的属性是activeActions中的line,为真则可以多选。剩下的就是业务逻辑处理了,可以根据他们的回调函数举行前端页面开发了。
小结
多写多敲多思考,毕竟,知己知彼才能看懂源码。
Tip:本人才学尚浅,如有纰漏,还请不吝见教!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |