首页 > 解决方案 > Fullcalendar 3 更改周时更改可拖动事件

问题描述

我与 laravel 一起使用 fullcalendar 3。

可拖动的事件是课程,每周应该不同。当我更改日历中的星期时,我想动态更改课程。

目前在控制器中,我有一个功能可以为我提供每门课程:

public function index()
    {
        $corsi = Corso::select('titolo', 'descrizione','ore_45esimi')->get();
        return view('lezione.calendario_lezioni')->with(array('corsi' => $corsi));
    }

然后在视图中我使用 div 显示事件:

<div id="external-events">
  @foreach($corsi as $corso)
    <div class="external-event bg-formazione">{{$corso->titolo }}
      <br>
      <div style="font-size: small">{{$corso->descrizione }} </div>
      <input id="ore" type="hidden" value="{{$corso->ore_45esimi }}">
    </div>
   @endforeach
 </div>

在 Fullcalendar js 文件中,我有一个使课程可拖动的功能:

    function ini_events(ele) {
            ele.each(function () {
                let eventObject = {
                    title: $(this).contents()
                        .filter(function () {
                            return !!$.trim(this.innerHTML || this.data);
                        })
                        .first().text(),

                    descrizione: $.trim($(this).contents()[3].firstChild.textContent),
                    ore: $(this).contents('#ore').val(),
                    color: $(this).css("background-color"), 
                };
                $(this).data('event', eventObject);

                $(this).draggable({
                    zIndex: 1070,
                    revert: true, 
                    revertDuration: 0  
                });

            });
        }

ini_events($('#external-events div.external-event'));

我找到了 viewRender 函数,它允许我获取显示的一周的开始和结束:

$('#calendar').fullCalendar({
...

viewRender: function (element) {
            var start = moment(element.intervalStart).format();
            var end = moment(element.intervalEnd).subtract(1, 'd').format();

        },
});

当我第一次显示日历和每次更改星期时,如何在控制器查询中的 index 方法中使用 start 和 end 变量?

标签: javascriptlaravelfullcalendar

解决方案


您希望在 php.ini 中传递两个 javascripts 变量。关于这个问题有大量文献,例如 Laravel Blade pass Javascript variable in php 有很多可能的解决方案。我更喜欢通过 url 将变量的值传递给新方法,然后通过会话传递给 index 方法。1) 路线/web.php

Route::get('yourproject/{start}/{end}/getstartandend','yourController@getstartandend');

2)查看

$('#calendar').fullCalendar({
...

viewRender: function (element) {
        var start = moment(element.intervalStart).format();
        var end = moment(element.intervalEnd).subtract(1, 'd').format();

    },
});
...
appBase="{!!URL::to('/')!!}";
var route = appBase + "/yourproject/"+start+"/"+end+"/getstartandend"; 
$.get(route);

3) 你的控制器

 public function index ()
 {
    $corsi = Corso::select('titolo', 'descrizione','ore_45esimi')->get();
    return view('lezione.calendario_lezioni')->with(array('corsi' => $corsi));
$start = session('start');
$end = session('end');
....
  }

 public function getstartandend ($start, $end)
{
 session(['start' => $start]);
 session(['end' => $end]);
}

推荐阅读