如何更新Symfony中的FullCalendar事件

发布于 2025-02-12 21:14:45 字数 3672 浏览 0 评论 0原文

大家好,大家。
我在我的Symfony Project(Symfony + Riotjs)中使用FullCalendar。
我想在按“ prev”或“下一个”按钮时动态加载事件。
因此,我在安装页面时制作了一个新日历,并将日历事件设置为“ null”。
您可以在代码上看到,我调用了LoadItems()函数以再次加载事件。 'prev'或'next'按钮。
,但我不确定如何更新loaditems()函数中的日历事件。
如果有人知道如何修复它,我将非常感谢。
我会等待回复。
谢谢。

           onMounted() {
                self = this;
                let calendarEl = this.$('#calendar');
                this.state.calendar = new Calendar(calendarEl, {
                    plugins: [ dayGridPlugin, timeGridPlugin, listPlugin ],
                    initialView: 'dayGridMonth',
                    headerToolbar: {
                        left: 'prev,next today',
                        center: 'title',
                        right: 'dayGridMonth,timeGridWeek'
                    },
                    buttonText: {
                        today: 'Heute',
                        month: 'Monat',
                        week: 'Woche',
                        day: 'Tag',
                    },
                    datesSet: function() {
                        let view = this.currentData.dateProfile.renderRange;
                        let start = view.start.toISOString().substring(0, 10);
                        let end = view.end.toISOString().substring(0, 10);

                        if (start != getSearchParam('begin')) {
                            updateSearchParam('begin', start);
                            updateSearchParam('end', end);
                            self.loadItems();
                        }
                    },
                    events: this.state.events,
                    initialDate: getSearchParam('date', '') ? getSearchParam('date', '') : this.moment().format('Y-MM-DD'),
                });
                this.state.calendar.setOption('locale', 'de');
                this.state.calendar.render();
                updateSearchParam('date', '');
                this.update();

                this.loadItems();
            },

这是LoadItems()函数。

            loadItems() {
                this.state.loading = true;
                this.update();

                if (this.state.request) {
                    this.state.request.abort();
                }

                this.state.request = this.API.get('/events', this.getParams());

                this.state.request.then(response => {
                    this.state.items = response.data.items;
                    this.state.filteredItems = null;
                    this.state.total = response.data.total;
                    this.state.events = [];

                    response.data.items.forEach( item => {
                        let event = {
                            id: item.id,
                            title: item.event.name,
                            start: this.moment(item.begin).format('Y-MM-DD'),
                            end: this.moment(item.end).format('Y-MM-DD'),
                            backgroundColor: item.event.type.bgColor,
                            borderColor: '#ffffff',
                            textColor: this.getTextColor(item.event.type.bgColor),
                        };

                        this.state.events.push(event);
                    });

                    this.state.loading = false;
                    this.update();


                    //after I gets the events I want to update the events of calendar here
                    //this.state.calendar.refetchEvents();
                    this.update();

                    this.state.request = null;
                });

                return this.state.request;
            },

Hello, everybody.
I am using fullcalendar in my symfony project(Symfony + RiotJS).
I want to load the events dynamically when I press 'prev' or 'next' button.
So I make a new calendar when the page is mounted and set the calendar events as 'null'.
As you can see on the code, I called the loadItems() function to load the events again when I press 'prev' or 'next' button.
But I can't sure how to update the events of calendar in the loadItems() function.
I'd really appreciate if someone knows how to fix it.
I will wait for reply.
Thanks.

           onMounted() {
                self = this;
                let calendarEl = this.$('#calendar');
                this.state.calendar = new Calendar(calendarEl, {
                    plugins: [ dayGridPlugin, timeGridPlugin, listPlugin ],
                    initialView: 'dayGridMonth',
                    headerToolbar: {
                        left: 'prev,next today',
                        center: 'title',
                        right: 'dayGridMonth,timeGridWeek'
                    },
                    buttonText: {
                        today: 'Heute',
                        month: 'Monat',
                        week: 'Woche',
                        day: 'Tag',
                    },
                    datesSet: function() {
                        let view = this.currentData.dateProfile.renderRange;
                        let start = view.start.toISOString().substring(0, 10);
                        let end = view.end.toISOString().substring(0, 10);

                        if (start != getSearchParam('begin')) {
                            updateSearchParam('begin', start);
                            updateSearchParam('end', end);
                            self.loadItems();
                        }
                    },
                    events: this.state.events,
                    initialDate: getSearchParam('date', '') ? getSearchParam('date', '') : this.moment().format('Y-MM-DD'),
                });
                this.state.calendar.setOption('locale', 'de');
                this.state.calendar.render();
                updateSearchParam('date', '');
                this.update();

                this.loadItems();
            },

And this is the loadItems() function.

            loadItems() {
                this.state.loading = true;
                this.update();

                if (this.state.request) {
                    this.state.request.abort();
                }

                this.state.request = this.API.get('/events', this.getParams());

                this.state.request.then(response => {
                    this.state.items = response.data.items;
                    this.state.filteredItems = null;
                    this.state.total = response.data.total;
                    this.state.events = [];

                    response.data.items.forEach( item => {
                        let event = {
                            id: item.id,
                            title: item.event.name,
                            start: this.moment(item.begin).format('Y-MM-DD'),
                            end: this.moment(item.end).format('Y-MM-DD'),
                            backgroundColor: item.event.type.bgColor,
                            borderColor: '#ffffff',
                            textColor: this.getTextColor(item.event.type.bgColor),
                        };

                        this.state.events.push(event);
                    });

                    this.state.loading = false;
                    this.update();


                    //after I gets the events I want to update the events of calendar here
                    //this.state.calendar.refetchEvents();
                    this.update();

                    this.state.request = null;
                });

                return this.state.request;
            },

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

反差帅 2025-02-19 21:14:46

我只是专注于如何按下“ prev”和“下一个”按钮时如何更新事件。

我搜索了很多有关方法,并且有许多解决方案。
例如:

  • $('#galudar')。fullcalendar('updateEvents',events)
  • $('#calendar')。fetchevents()

但是这些方法不起作用关于我的问题。

最后,我找到了一个简单的方法。
这是setOption()方法。
正如您在上面的代码上看到的那样,有一些选项,例如'datestet'和'events'。
当我按下按钮时,“ datesset”选项每次都调用(上一篇,下一个,今天,月,一周等)。
“事件”选项适用于事件在当前日历视图上显示。
我使用了这样的setOption()方法。

this.state.calendar.setOption('events', this.state.events);

它对我效果很好。
我建议那些阅读我的问答的人仔细阅读教程和文档。

FullCalendar确实是完善的JavaScript软件包,我们可以非常简单地使用它。

I just focused how to update events when I press the 'prev' and 'next' button.

I searched a lot about the method and there were many solutions.
For example:

  • $('#calendar').fullCalendar('updateEvents', events)
  • $('#calendar').fetchEvents()

But these methods are not working on my problem.

Finally, I found a simple method.
It is a setOption() method.
As you can see on my above code, there are options like 'datesSet' and 'events'.
The 'datesSet' option is called everytime when I press the buttons (prev, next, today, month, week and etc).
And the 'events' option is for events to show on the current calendar view.
I used setOption() method like this.

this.state.calendar.setOption('events', this.state.events);

It worked well for me.
I suggest the people who read my question and answer, to read the tutorials and documentations carefully.

Fullcalendar is really well-built javascript package and we can use it very simply.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文