【发布时间】:2017-04-12 10:45:20
【问题描述】:
我制作了数据透视表“save_events”和控制器“颜色”。在控制器中进行查询并将其发送到 Ajax。然后我得到 events_id (它是我的数据透视表中的一列)并使用 console.log(JSONObject.eventColored[0].events_id);检查 id 事件及其工作正常。但我需要将它传递给必须更改背景颜色事件的其他函数。而且我不知道该怎么做。
<script src="{{ asset('js/fullcalendar') }}/fullcalendar.js"></script>
<script src="{{ asset('js/bootstrap.js') }}"></script>
<script type="text/javascript">
$(document).ready(function() {
var base_url = '{{ url('/') }}';
$.ajax(
{
type: "GET",
url: "{!!route('color')!!}",
dataType: "json",
data:{"events_id": '' },
success: function(data)
{
var JSONString=data;
//var JSONObject = JSON.parse(JSON.stringify(data));
//console.log(data);
console.log(data.eventColored[0].events_id);
var color_events=data.eventColored[0].events_id;
$('#bootstrapModalFullCalendar').fullCalendar({
weekends: true,
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek'
},
eventClick: function(event, jsEvent, view) {
$('#modalTitle').html(event.title);
$('#modalBody').html(event.name);
$('#eventUrl').attr('href','/home/zapis/'+event.id);
$("#startTime").html(moment(event.start).format('HH:mm '));
if (event.end) $("#endTime").html(moment(event.end).format('HH:mm '));
else $("#endTime").html('');
$('#fullCalModal').modal();
return false;
},
eventLimit: true,
FirstDay: 1,
contentheight : 650,
editable : true,
allDay : false,
aspectRatio : 2,
slotLabelFormat : 'HH:mm:ss',
timeFormat : 'HH:mm',
displayEventEnd : true,
events: {
url: base_url + '/api',
error: function() {
alert("cannot load json");
}
},
eventColor: 'white',
eventAfterRender: function (event, element, view, color_events) {
if(event.id==color_events){
element.css('background-color', '#cccccc');
}
else
{
if (event.title == "Wydzial 1")
{
element.css('background-color', '#378006');
}
else if(event.title == "Wydzial 2")
{
element.css('background-color', '#ff0000');
}
else if(event.title == "Wydzial 3")
{
element.css('background-color', '#73e600');
}
else{
element.css('background-color', '#0066ff');
}
}
}
});
}
});
});
</script>
此时我的问题是:在 Ajax 中,我得到了 JSONObject.eventColored[0].events_id,但我无法在 eventAfterRender: function (event, element, view) 中使用它 我收到了这个错误:
jQuery.Deferred exception: JSONObject is not defined .eventAfterRender@http://localhost:8000/home:206:1
和控制器(我所做的项目是使用 Laravel 5.4):
class Color extends Controller
{
public function colorEvent()
{
$eventColored = DB::table('save_events')->get(['users_id','events_id']);
return response()->json(['eventColored'=>$eventColored])->$eventColored = array('eventColored' => $eventColored );
}
}
循环:
eventAfterRender: function (event, element, view) {
var color_events = [];
for (i = 0; i < data.eventColored.length; i++) {
color_events.push(data.eventColored[i].events_id);
};
console.log(color_events);
console.log(event.id);
if(color_events==event.id){
element.css('background-color', '#cccccc');
}
else
{
if (event.title == "Wydzial 1")
{
element.css('background-color', '#378006');
}
else if(event.title == "Wydzial 2")
{
element.css('background-color', '#ff0000');
}
else if(event.title == "Wydzial 3")
{
element.css('background-color', '#73e600');
}
else{
element.css('background-color', '#0066ff');
}
}
}
控制台
Array [ 8, 9, 7 ] home:242:5
1 home:243:5
Array [ 8, 9, 7 ] home:242:5
5 home:243:5
Array [ 8, 9, 7 ] home:242:5
6 home:243:5
Array [ 8, 9, 7 ] home:242:5
7 home:243:5
Array [ 8, 9, 7 ] home:242:5
8 home:243:5
Array [ 8, 9, 7 ] home:242:5
9 home:243:5
Array [ 8, 9, 7 ] home:242:5
10
好的,我试着解释一下。 Fullcalendar 获取 1 个名为“Events”的表,其中包含用户可以查看主页的所有事件。接下来认为用户可以做的是点击事件并加入它,然后它在数据透视表“save_events”
【问题讨论】:
-
我有这样的想法:var color_events = $.ajax 然后我将它传递给 if(event.id==color_events) 但它不起作用的事件不会改变背景颜色
-
var JSONObject = JSON.parse(JSON.stringify(data));。这条线完全没有意义。输出(JSONObject)与输入(数据)相同。 -
“我不能在 eventAfterRender 中使用它”。不,因为当时没有定义。直到 ajax 调用完成后才会填充它。 Ajax 调用异步运行,因此您的完整日历代码(包括 eventAfterRender 事件)将在
$.ajax调用中运行之前您的“成功”回调。 -
我认为您有 2 个选项: 1. 无论在“颜色”控制器中运行什么代码,首先在创建 fullCalendar 事件的代码中运行它 - 然后您就可以找到该事件并更改它的背景属性之前你曾经将它发送到浏览器。这样就无需在加载页面后立即对服务器进行额外的 ajax 调用。
-
2.将创建 fullCalendar 的代码移动到 ajax 调用的“成功”回调中。那么就可以保证在“eventAfterRender”代码运行时事件ID是可用的。
标签: javascript jquery ajax