Christian Kruse: event-handler für "nachgeschobene" Inhalte

Beitrag lesen

Hallo Matthias,

Hm. Es sieht so aus, als wäre das nicht zielführend. Wahrscheinlich weil die Nachrichten nicht auf meinem Client erstellt wurden?

Jedenfalls erzeugt dieses JavaScript nicht die entsprechende Klasse.

cforum.client.on('message:create', function(event) {
  $('.user-link > img[alt=Missing]').parent().parent().addClass('ohne-bild');
})

So, ich habe jetzt mal genauer geschaut. Ist klar, dass das nicht funktioniert, aus mehreren Gründen:

  • cforum.client existiert noch nicht zu dem Zeitpunkt, wo das User-JS ausgeführt wird
  • die Reihenfolge ist nicht unbedingt definiert; es kommt vor, dass meine Event-Handler erst später ausgeführt werden
  • ich verwende zur <del>Verhind</del><ins>Umgehung</ins> einer Race Condition window.setTimeout

Ich habe mir überlegt, dass es gar nicht mal so sinnvoll ist, dass hier auf internen Events gehorcht wird und habe deshalb kurzerhand eine öffentliche Event-API erstellt. Es gibt jetzt ein Event update, dass immer getriggert wird, wenn das Forum Daten ändert und dann spezifischere Events in den einzelnen Situationen. Folgender JS-Code geht:

function mapselFoo(ev) {
  $('.user-link > img[alt=Missing]').parent().parent().addClass('ohne-bild');
}

$(document).ready(function() {
  mapselFoo();
  cforum.events.on('update', mapselFoo);
});

Es gibt noch: update:message (wird gefeuert, wenn eine neue Nachricht eintrifft), update:thread (wird gefeuert wenn ein Thread erstellt wird oder wenn ein Thread sich im Index ändert), update:mail (wird geschmissen wenn eine neue Mail eintrifft) sowie update:notifications (wird gefeuert wenn eine neue Notification eintrifft).

LG,
CK