使用 fullcalendar.io 创建事件后触发一次
Trigger once after event created using fullcalendar.io
代码:http://jsfiddle.net/AzmJv/1008/
当鼠标悬停在日历中的事件上时,我正在尝试使用 Bootstrap Popover 插件创建 popover
。但是,在创建新事件 DOM 后,我找不到将 popover()
绑定到它的方法。
我尝试根据文档使用 eventAfterRender
事件,但它似乎被日历中的 ALL 事件触发。
http://fullcalendar.io/docs/event_rendering/
HTML:
<div id='calendar'></div>
JS:
$(document).ready(function () {
$('#calendar').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
defaultDate: '2015-02-12',
selectable: true,
selectHelper: true,
select: function (start, end) {
var title = prompt('Event Title:');
var eventData;
if (title) {
eventData = {
title: title,
start: start,
end: end
};
// console.log(eventData);
$('#calendar').fullCalendar('renderEvent', eventData, true); // stick? = true
}
$('#calendar').fullCalendar('unselect');
},
eventAfterRender: function (event, element, view) {
console.log('eventAfterRender');
console.log(event);
console.log(element);
console.log(view);
},
editable: true,
eventLimit: true, // allow "more" link when too many events
events: [{
title: 'All Day Event',
start: '2015-02-01'
}, {
title: 'Long Event',
start: '2015-02-07',
end: '2015-02-10'
}, {
id: 999,
title: 'Repeating Event',
start: '2015-02-09T16:00:00'
}, {
id: 999,
title: 'Repeating Event',
start: '2015-02-16T16:00:00'
}, {
title: 'Conference',
start: '2015-02-11',
end: '2015-02-13'
}, {
title: 'Meeting',
start: '2015-02-12T10:30:00',
end: '2015-02-12T12:30:00'
}, {
title: 'Lunch',
start: '2015-02-12T12:00:00'
}, {
title: 'Meeting',
start: '2015-02-12T14:30:00'
}, {
title: 'Happy Hour',
start: '2015-02-12T17:30:00'
}, {
title: 'Dinner',
start: '2015-02-12T20:00:00'
}, {
title: 'Birthday Party',
start: '2015-02-13T07:00:00'
}, {
title: 'Click for Google',
url: 'http://google.com/',
start: '2015-02-28'
}]
});
});
CSS:
body {
margin: 40px 10px;
padding: 0;
font-family:"Lucida Grande", Helvetica, Arial, Verdana, sans-serif;
font-size: 14px;
}
#calendar {
max-width: 900px;
margin: 0 auto;
}
您可以在控制台中看到日志,显示每次您通过单击日期创建新事件时,它都会通过调用 eventAfterRender
循环遍历所有现有事件。
所以问题:
如何在创建新事件后触发一次?
如何 属性 将事件 DOM 与 popover
绑定并获得额外数据(如 description
键)?我不想只查询 DOM 来显示标题。
谢谢。
渲染和创建事件是不同的过程。
当您创建或以其他方式添加事件时,您实际上是在定义 source,而不是向 dom 添加元素。源可以是 json 提要、函数或静态 object,但 FC 会在每次需要渲染时查看它。
每次 FC 更改其视图时都会进行渲染。它向所有事件源询问它们的事件,然后呈现它们。这是与 DOM.
交互的进程
Q1 - 如何在创建新事件后触发一次?
不要。将条件步骤添加到 eventAfterRender
或 eventRender
.
Q2 - 如何 属性 将事件 DOM 与弹出窗口绑定并拥有额外的数据(如描述键)?我不想只查询 DOM 来显示标题。
创建事件后,将其添加为事件源:
select: function (start, end) {
var title = prompt('Event Title:');
var eventData;
if (title) {
eventData = {
title: title,
start: start,
end: end,
description: "Some popover text",
hasPopover: "true" // custom field
};
$('#calendar').fullCalendar('addEventSource', { // Add an event source
events: [eventData]
});
}
$('#calendar').fullCalendar('unselect');
},
然后在渲染时给它一个弹出框:
eventAfterRender: function (event, element, view) {
if(event.hasPopover){ // We can check against this custom attribute
$(element).data({ // assign data attributes to the event element for popover's use
content: event.description,
title:event.title
}).popover({trigger:"hover"});
}
}
这是一个有效的 JSFiddle。
代码:http://jsfiddle.net/AzmJv/1008/
当鼠标悬停在日历中的事件上时,我正在尝试使用 Bootstrap Popover 插件创建 popover
。但是,在创建新事件 DOM 后,我找不到将 popover()
绑定到它的方法。
我尝试根据文档使用 eventAfterRender
事件,但它似乎被日历中的 ALL 事件触发。
http://fullcalendar.io/docs/event_rendering/
HTML:
<div id='calendar'></div>
JS:
$(document).ready(function () {
$('#calendar').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
defaultDate: '2015-02-12',
selectable: true,
selectHelper: true,
select: function (start, end) {
var title = prompt('Event Title:');
var eventData;
if (title) {
eventData = {
title: title,
start: start,
end: end
};
// console.log(eventData);
$('#calendar').fullCalendar('renderEvent', eventData, true); // stick? = true
}
$('#calendar').fullCalendar('unselect');
},
eventAfterRender: function (event, element, view) {
console.log('eventAfterRender');
console.log(event);
console.log(element);
console.log(view);
},
editable: true,
eventLimit: true, // allow "more" link when too many events
events: [{
title: 'All Day Event',
start: '2015-02-01'
}, {
title: 'Long Event',
start: '2015-02-07',
end: '2015-02-10'
}, {
id: 999,
title: 'Repeating Event',
start: '2015-02-09T16:00:00'
}, {
id: 999,
title: 'Repeating Event',
start: '2015-02-16T16:00:00'
}, {
title: 'Conference',
start: '2015-02-11',
end: '2015-02-13'
}, {
title: 'Meeting',
start: '2015-02-12T10:30:00',
end: '2015-02-12T12:30:00'
}, {
title: 'Lunch',
start: '2015-02-12T12:00:00'
}, {
title: 'Meeting',
start: '2015-02-12T14:30:00'
}, {
title: 'Happy Hour',
start: '2015-02-12T17:30:00'
}, {
title: 'Dinner',
start: '2015-02-12T20:00:00'
}, {
title: 'Birthday Party',
start: '2015-02-13T07:00:00'
}, {
title: 'Click for Google',
url: 'http://google.com/',
start: '2015-02-28'
}]
});
});
CSS:
body {
margin: 40px 10px;
padding: 0;
font-family:"Lucida Grande", Helvetica, Arial, Verdana, sans-serif;
font-size: 14px;
}
#calendar {
max-width: 900px;
margin: 0 auto;
}
您可以在控制台中看到日志,显示每次您通过单击日期创建新事件时,它都会通过调用 eventAfterRender
循环遍历所有现有事件。
所以问题:
如何在创建新事件后触发一次?
如何 属性 将事件 DOM 与
popover
绑定并获得额外数据(如description
键)?我不想只查询 DOM 来显示标题。
谢谢。
渲染和创建事件是不同的过程。
当您创建或以其他方式添加事件时,您实际上是在定义 source,而不是向 dom 添加元素。源可以是 json 提要、函数或静态 object,但 FC 会在每次需要渲染时查看它。
每次 FC 更改其视图时都会进行渲染。它向所有事件源询问它们的事件,然后呈现它们。这是与 DOM.
交互的进程Q1 - 如何在创建新事件后触发一次?
不要。将条件步骤添加到 eventAfterRender
或 eventRender
.
Q2 - 如何 属性 将事件 DOM 与弹出窗口绑定并拥有额外的数据(如描述键)?我不想只查询 DOM 来显示标题。
创建事件后,将其添加为事件源:
select: function (start, end) {
var title = prompt('Event Title:');
var eventData;
if (title) {
eventData = {
title: title,
start: start,
end: end,
description: "Some popover text",
hasPopover: "true" // custom field
};
$('#calendar').fullCalendar('addEventSource', { // Add an event source
events: [eventData]
});
}
$('#calendar').fullCalendar('unselect');
},
然后在渲染时给它一个弹出框:
eventAfterRender: function (event, element, view) {
if(event.hasPopover){ // We can check against this custom attribute
$(element).data({ // assign data attributes to the event element for popover's use
content: event.description,
title:event.title
}).popover({trigger:"hover"});
}
}
这是一个有效的 JSFiddle。