跳至内容
菜单
此问题已终结
2021 查看

In odoo **web** module I found **CalendarCommonRenderer** in his setup method, they get instance of **fullcalendar** 


    export class CalendarCommonRenderer extends Component {

        setup() {

            this.fc = useFullCalendar("fullCalendar", this.options);

            this.click = useClickHandler(this.onClick, this.onDblClick);

            this.popover = useCalendarPopover(this.constructor.components.Popover);

            this.onWindowResizeDebounced = useDebounced(this.onWindowResize, 200);

    

            useEffect(() => {

                this.updateSize();

            });

    

            useEffect(

                (view) => {

                    this.env.config.setDisplayName(`${this.props.displayName} (${view.title})`);

                },

                () => [this.fc.api.view]

            );

        }


and **this.options** are options  for fullcalendar instance parameter, like this:


    get options() {

            return {

                allDaySlot: this.props.model.hasAllDaySlot,

                allDayText: this.env._t("All day"),

                columnHeaderFormat: this.env.isSmall

                    ? SHORT_SCALE_TO_HEADER_FORMAT[this.props.model.scale]

                    : SCALE_TO_HEADER_FORMAT[this.props.model.scale],

                dateClick: this.onDateClick,

                dayRender: this.onDayRender,

                defaultDate: this.props.model.date.toISO(),

                defaultView: SCALE_TO_FC_VIEW[this.props.model.scale],

                dir: localization.direction,

                droppable: true,

                editable: this.props.model.canEdit,

                eventClick: this.onEventClick,

                eventDragStart: this.onEventDragStart,

                eventDrop: this.onEventDrop,

                eventLimit: this.props.model.eventLimit,

                eventLimitClick: this.onEventLimitClick,

                eventMouseEnter: this.onEventMouseEnter,

                eventMouseLeave: this.onEventMouseLeave,

                eventRender: this.onEventRender,

                eventResizableFromStart: true,

                eventResize: this.onEventResize,

                eventResizeStart: this.onEventResizeStart,

                events: (_, successCb) => successCb(this.mapRecordsToEvents()),

                firstDay: this.props.model.firstDayOfWeek % 7,

                header: false,

                height: "parent",

                locale: luxon.Settings.defaultLocale,

                longPressDelay: 500,

                navLinks: false,

                nowIndicator: true,

                plugins: ["dayGrid", "interaction", "timeGrid", "luxon"],

                select: this.onSelect,

                selectAllow: this.isSelectionAllowed,

                selectMinDistance: 5, // needed to not trigger select when click

                selectMirror: true,

                selectable: this.props.model.canCreate,

                slotLabelFormat: is24HourFormat() ? HOUR_FORMATS[24] : HOUR_FORMATS[12],

                snapDuration: { minutes: 15 },

                timeZone: luxon.Settings.defaultZone.name,

                unselectAuto: false,

                weekLabel:

                    this.props.model.scale === "month" && this.env.isSmall ? "" : this.env._t("Week"),

                weekNumberCalculation: "ISO",

                weekNumbers: true,

                weekNumbersWithinDays: !this.env.isSmall,

                windowResize: this.onWindowResizeDebounced,

            };

        }


and **CalendarCommonRenderer** is a subcomponent of **CalendarRenderer** to determine if is **week**, **day** calendar. In registry they add **calendarView**, like bellow:



    export const calendarView = {

        type: "calendar",

    

        display_name: "Calendar",

        icon: "fa fa-calendar",

        multiRecord: true,

        searchMenuTypes: ["filter", "favorite"],

    

        ArchParser: CalendarArchParser,

        Controller: CalendarController,

        Model: CalendarModel,

        Renderer: CalendarRenderer,

    

        buttonTemplate: "web.CalendarController.controlButtons",

    

        props: (props, view) => {

            const { ArchParser } = view;

            const { arch, relatedModels, resModel } = props;

            const archInfo = new ArchParser().parse(arch, relatedModels, resModel);

            return {

                ...props,

                Model: view.Model,

                Renderer: view.Renderer,

                buttonTemplate: view.buttonTemplate,

                archInfo,

            };

        },

    };

    

    registry.category("views").add("calendar", calendarView);


Now, I want to update from **CalendarController** the fullcalendar options or re.render the fullcalendar with new options.


ATT.: in my code I have inhertance for **CalendarController**, **CalendarModel**, **CalendarRenderer** and **CalendarCommonRenderer**


I can Update fullcalendar options or re-render with new options from **CalendarModel**, **CalendarRenderer** or **CalendarController**?

形象
丢弃
相关帖文 回复 查看 活动
2
12月 24
3783
1
10月 24
1988
0
11月 23
1236
0
7月 25
5941
1
7月 25
1737