event-handler für "nachgeschobene" Inhalte
bearbeitet von Christian KruseHallo 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.
>
> ~~~js
> 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](https://github.com/ckruse/cforum/commit/997ccf19320972df2e3e4415f0fec90e5103ade0) 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:
~~~ js
function mapselFoo(ev) {
$('.user-link > img[alt=Missing]').parent().parent().addClass('ohne-bild');
}
$(document).ready(mapselFoo)
$(document).ready(function() {
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
--
<https://wwwtech.de/about>