javascript - 使用模态 Bootstrap 在 Fullcalendar 中编辑事件

标签 javascript ruby-on-rails fullcalendar

我正在尝试使用模态 Bootstrap 编辑对象。我已经知道,如果您在 Fullcalendar 中单击一个事件,则会出现一个表格,其中包含该事件的信息(级别、日期、期间),因此我可以编辑该事件(对象)的级别和日期。问题是,当我单击底部保存时,会创建一个新对象而不是编辑该事件。我不能获取点击事件的参数并更改它们吗??

这是我设置 eventClick 函数的 javascript。

var y = "y";
function drawControl(controls) {

        $('#calendar').fullCalendar({
            editable: true,
            aspectRatio: 1,
            contentHeight: 500,
            scrollTime: '24:00:00',
            minTime: '01:00:00',
            maxTime: '24:00:00',
            defaultView: 'agendaWeek',
            header:{left:"prev,next,today",
            center:"title",
            right:"month, agendaWeek, agendaDay"},


            events: allControls(controls),

            eventRender: function(event, element) {

                var bloodLevel=event.title

                if(bloodLevel >= 180) {
                    element.css('background-color', 'red');
                }
                else if(bloodLevel < 70) {
                    element.css('background-color', 'yellow');
                }
            },
            eventClick: function(calEvent, jsEvent, view) {
                    x=calEvent.id;
                $('#modalTitle').html(calEvent.title);
                $('#control_day_edit').val(calEvent.start);
                $('#control_level').val(calEvent.title.toString());
                    console.log(calEvent.title)
                    console.log(calEvent.start._i)
                    console.log(calEvent.id)
                $('#eventUrl').attr('href',"/users/:user_id/controls/calEvent.id/edit");
                $('#fullCalModal').modal();
                y=calEvent;

            }
})
}

});

document.getElementById('button_edit').addEventListener("click", editControl);

 function editControl(event) {
     event.preventDefault();
     console.log(x);
     var controlEdited = {
         "level": document.getElementById('control_level').value,
         "day": document.getElementById('control_day_edit').value,
         "period": document.getElementById('control_period').value,
         "id": x
    }
    $('#calendar').fullCalendar('updateEvent', y);
    $.post("/editControls", JSON.stringify(controlEdited));

    console.log(controlEdited)

};

这是我的 Controller 的代码

def editControls
    if request.xhr?
        @control = JSON.parse!(request.body.read.to_s)
        Control.where(id: @control["id"])[0].update_attributes(level: @control["level"], day: @control["day"], period: @control["period"])
        render json: "ok"
    else
        return error
    end
end

这是 View 的代码

<div id="fullCalModal" class="modal fade">
<div class="modal-dialog">
    <div class="modal-content">
        <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span> <span class="sr-only">close</span></button>
            <h4 id="modalTitle" class="modal-title"></h4>
        </div>
        <div id="modalBody" class="modal-body">
          <%= render 'form_edit' %>
        </div>
        <div class="modal-footer">
            <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
            <button class="btn btn-primary"><a id="eventUrl" target="_blank">Event Page</a></button>
        </div>
    </div>
</div>

这是表格

<% modal ||= false %>
<% remote = modal ? true : false %>
<div class="">
<%= form_for [@user, @control],remote: remote, html: {role: :form, 'data-model' => 'control'} do |f| %>
    <p class="new_control_text">Edit Control</p>
      <div class="form-group">
        <div class="input-group">
          <%= f.label :level, class: "sr-only"%>

          <%= f.number_field :level, class: "form-control", placeholder: "Enter level" %>

        </div>
      </div>

      <div class="form-group container">
        <div class="row datetimeselect">
            <div class='col-sm-12'>
                <div class="form-group">
                    <div class='input-group date' id='datetimepicker2'>

                        <%= f.text_field :day, default: @control_day, :class => 'form-control', id: "control_day_edit" %>
                        <span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span>
                        </span>
                    </div>
                </div>
            </div>
         </div>
     </div>

    <div class="select_period">
       <%= f.select :period, options_for_select([['pre-breakfast'], ['post-breakfast'],['pre-lunch'],['post-lunch'],['afternoon'],['pre-dinner'],['post-dinner']]), {}, class: "form-control" %>
    </div>      

      <a href="#" id="button_edit" class="btn btn-default btn-lg" role="button">
            Save
      </a>

<% end %>
</div>

最佳答案

在您的 eventClick 中,您可以访问 calEvent 对象。你需要update这个对象看到它正确地反射(reflect)在日历中。查看 fullCalendar docs 中的更多事件数据方法

关于javascript - 使用模态 Bootstrap 在 Fullcalendar 中编辑事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27711108/

相关文章:

javaScript RegExp 第二个索引

ruby-on-rails - 跳过对create方法的验证

ruby-on-rails - 连接到 PostgreSQL 数据库时出现 Rails 问题

ruby-on-rails - 使用 Rspec 的 Rails 5 邮件程序预览

javascript - 在 Laravel 4 上使用循环将数据数组存储到单个数组中

javascript - 无论如何在 Firefox 中保存 javascript 断点?

javascript - 全日历 html 弹出窗口

javascript - 如何使用 fullcalendar 事件作为变量?

reactjs - 停止在之前的日期中删除事件 fullcalendar react

javascript - 将数组作为对象的一部分传递给 Ajax 调用