"Uncaught TypeError: Cannot read property 'Klon' von undefined" beim hinzufügen wiederkehrende Ereignisse zu Datenbank
Aus irgendeinem Grund, den ich bin immer ""Uncaught TypeError: Cannot read property 'Klon' von undefined", wenn ich versuche zu aktualisieren, die Kalender mit einer aktuellen Reihe wiederkehrender event mit $('#calendar').fullCalendar('updateEvent',Termine[i]); in der " call of meinen ajax - (überprüfen Sie die letzten code-snippet)
Dies ist die Struktur meiner Funktion aufrufen:
Ich rufe addEventSource innerhalb der eventReceive-Funktion, so dass, wenn ein element gezogen wird, um den Kalender, diese werden gelöscht und der wiederkehrenden Ereignisse werden Hinzugefügt:
eventReceive : function(event) {
...
$('#calendar').fullCalendar('removeEvents', event._id);
$('#calendar').fullCalendar( 'addEventSource',function(start, end, status, callback) {
Innen addEventSource, ich wähle einfach den Tag der Woche, dass der Fall fallen gelassen wurde und auf duplizieren, die für die kommenden Tage mit dem gleichen Tag:
$('#calendar').fullCalendar( 'addEventSource',function(start, end, status, callback) {
var start_date = event.start.toDate();
var stop_date = new Date("2017-01-15"); //for testing purposes to avoid filling up database with too many entries
var events = [];
...
for (loop = start_date.getTime(); (loop <= end._d.getTime()) && (loop <= stop_date); loop = loop + (24 * 60 * 60 * 1000)) {
...
var test_date = new Date(loop);
var momentOfDate = moment(test_date);
var formattedStart = momentOfDate.format("YYYY-MM-DDTHH:mm:ss");
...
if (test_date.getDay() == event.start.weekday()) {
events.push({
title: event.title,
start: formattedStart,
end: //same procedure for end as start
parent_id : //some variable
id: //some unique variable,
tDuration : event.tDuration,
dow : ''
});
} //if
} //for loop
callback(events);
Nach dem Rückruf, wir möchten, fügen Sie den neu erstellten Ereignisse in die Datenbank. Und das funktioniert gut, jedem wiederkehrenden Ereignis Hinzugefügt habe ich in die Datenbank, WENN ich ausschließen "$('#calendar').fullCalendar('updateEvent',Termine[i]);" Funktion aufrufen, aber dann muss ich die Seite neu laden um die Datenbank zu aktualisieren, wenn ich mich bewege, Veranstaltungen rund um. Dies ist der ajax-call:
for (i = 0 ; i < events.length-1 ; i++) {
var duration = events[i].tDuration;
$.ajax({
url: 'process.php',
data: 'type=new&title='+events[i].title+'&startdate='+events[i].start+'&duration='+duration+'&enddate='+events[i].end+'&dow='+events[i].dow,
type: 'POST',
dataType: 'json',
success: function(response){
//location.reload(); WORKS but requires reload
$('#calendar').fullCalendar('updateEvent',events[i]); //generates typeError but needed in order modify recurring events
},
error: function(e){
alert('error');
console.log(e.responseText);
}
})
}
Was kann ich tun in dieser situation? Kann ich ohne Probleme hinzufügen ein einzelnes Ereignis, und führen Sie eine identische version des ajax ohne Fehler, das problem tritt auf, wenn ich versuche, Zugriff auf die Ereignisse in meinem eigenen 'events' array anstatt das Ereignis als argument übergeben in der eventReceive Aufruf der Funktion. Aber da bin ich hinzufügen mehrerer Ereignisse bin ich irgendwie gezwungen, es zu tun, die ich Tue, wie es scheint.
Code für solo-Veranstaltung (FUNKTIONIERT!):
eventReceive : function(event) {
var title = event.title;
var start = event.start.format();
var end = event.end.format();
var duration = event.tDuration;
var dow ='';
$.ajax({
url: 'process.php',
data: 'type=new&title='+title+'&startdate='+start+'&duration='+duration+'&enddate='+end+'&dow='+dow,
type: 'POST',
dataType: 'json',
success: function(response){
event.id = response.eventid;
$('#calendar').fullCalendar('updateEvent',event);
},
error: function(e){
alert('error');
console.log(e.responseText);
}
});
entfernt attempt1 cus eine Lösung gefunden, selbst das funktionierte
InformationsquelleAutor jones | 2016-12-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim Aufruf updateEvent, Veranstaltung müssen die original-Ereignisobjekts für ein Ereignis, nicht bloß eine rekonstruierte Objekt.
So müssen Sie entweder erhalten Sie das original-event und aktualisieren Sie die Eigenschaften auf und rufen Sie dann updateEvent oder Sie nennen könnte removeEvents übergabe der id und rufen Sie dann renderEvent bestehen der Veranstaltung aus Ihrem array.
Würde ich nur entfernen Sie die Ereignisse übergeben ein array von ids und dann machen Sie wieder zu. Sie können rufen Sie renderEvents ein array übergeben, so dass Sie nicht haben, um eine Schleife durch Sie.
Ich habe etwas ähnliches gemacht, vom server, geht es wieder eine Liste von ids und eine Liste von Ereignissen, und ich einfach anrufen removeEvents und renderEvents. Es heißt, Sie könnten eine einzige Ajax-call auch.
Ich verstehe nicht, wie 1 ajax-calls ausreichen würde, da ich Durchlaufen um alle Attribute aller Ereignisse, und fügen Sie dann zu der Datenbank. Wollen Sie die removeEvents und renderEvents Funktionen Anrufe in der ajax-Erfolg call oder wo?
Fühlen Sie sich frei zu Bearbeiten code, geben Sie es ein bisschen mehr
InformationsquelleAutor Ally Murray
So ich ' ve wurde kämpfen mit diesem für einige Zeit jetzt und schließlich die beste Lösung gefunden. Für wiederkehrende Ereignisse, die nicht mit dem addEventSource Funktion, es schafft zu viel chaos mit der callback-Funktion. Erstellen Sie einfach eine for-Schleife, definieren Sie eine neue varr für event und Eigenschaften hinzuzufügen, verwenden Sie $('#calendar').fullCalendar('renderEvent',Ereignis,true) hinzufügen, um das Ereignis zum Kalender, so dass es klebt, und dann verwenden Sie die ajax () - Aufruf hinzufügen, um das Ereignis in die Datenbank, so dass, wenn Sie aktualisieren, es bleibt.
InformationsquelleAutor jones