juppix: Objekt erzeugen bzw. aktualisieren

Huhu! Wieder mal ich mit einer "spezialfrage"...:

ich habe auf EINER Seite

  1. eine Tabelle (https://www.datatables.net/) und
  2. einen Kalender (bootstrap-year-calendar).

Diese beiden Objekte benutze ich um Daten einmal in tabellarischer Form und einmal in Kalenderform darzustellen.

Der User hat einen Kalender-Button, und mit Click wird jeweils 1 oder 2 dargestellt (visibility).

Wenn die Seite lädt stelle ich als 1. die Tabelle dar.- Es wird jedoch im "Hintergrund" bereits das Kalender-Objekt "initialisiert" (aber bleibt ausgeblendet):

$(function() {
    var currentYear = new Date().getFullYear();

    $('#calendar').calendar({ 
        enableContextMenu: true,
        enableRangeSelection: true,

Jetzt habe ich das Problem, dass ich es nur hinbekommen habe, den Kalender mit Ajax-Daten zu befüllen, beim "yearChanged"-Event des Kalenders (so beschrieben vom Entwickler):

		yearChanged: function(e) {				
			e.preventRendering = true;			

			$(e.target).append('<div style="text-align:center"><img src="./img/loading_spinner.gif" /></div>');

			var jqTextToJson = {
				  "text json": function(jsonString) {
					return JSON.parse(jsonString,
						function(name, value) {
							if (name === "startDate" || name === "endDate")
								return new Date(value);
							return value;
					});
			    }
			 };
			
			$.ajax({

				dataType: "json",
				url: "./getCalendarData.php?typ=calendar&id=" + $("#SelectKonto option:selected").val(),
				converters: jqTextToJson,
				success: function(dataSource) {  
					$(e.target).data('calendar').setDataSource(dataSource);
				} 			    
			});		
		}

Das funktioniert nun auch - halt eben nur wenn der User im Kalender AKTIV das Jahr wechselt.

Ich möchte jedoch die Daten bereits früher laden (also beim Initialisieren des Kalenders).

Oder noch besser: Beim Klick auf den "Kalender"-Button, der von der Listenansicht zum Kalender wechselt. --> Dann direkt refreshen.

Kann mir jemand helfen?

1000 dank vorab

akzeptierte Antworten

  1. Oder am einfachsten wäre, wenn ich mit einem Klick auf den Button die Funktion "yearchanged()" vom Calendar manuell aufrufen könnte?!

    so in etwa: $('#calendar').yearChanged();

  2. Hallo juppix,

    ich würde mal unterstellen, dass setDataSource auch außerhalb eines Eventhandlers funktioniert.

    Du solltest also deinen yearChanged Eventhandler entkernen und die Datenbeschaffung in eine eigene Funktion auslagern, dann kannst Du sie auch separat aufrufen.

    Rolf

    --
    sumpsi - posui - clusi
    1. Großartig! Funktioniert 😀 Daaanke!!