[GELÖST] Doppeltes Event beim Schließen von Popup.

Begonnen von DocCyber, 24 März 2025, 18:55:00

Vorheriges Thema - Nächstes Thema

DocCyber

Hallo zusammen.

Mittels einer Schaltfläche starte ich ein kleines Perl-Script, das verschiedene Einstellungen vornehmen soll. In diesem Script wird abschließend eine Steuervariable (popup_ctrl_test auf on) gesetzt, was den Popup-Dialog anzeigt [active]=... .
Über @close= ... wird die Steuervariable auf off gesetzt und dadurch der Dialog wieder geschlossen.
Das funktioniert alles ohne Probleme. Allerdings zeigen sowohl Event Monitor wie Toast-Messages, dass das Event zum Schließen stets doppelt ausgeführt wird.
2025-03-24 18:17:02 dummy popup_ctrl_test on
2025-03-24 18:17:06 dummy popup_ctrl_test off
2025-03-24 18:17:06 dummy popup_ctrl_test off
Du darfst diesen Dateianhang nicht ansehen.
Dabei spielt die "Schließmethode" keine Rolle: Click auf X, Click außerhalb des Dialogfensters, auch beim automatischen Schließen (wenn kein timeout gesetzt ist).
EDIT: Soeben ist mir noch aufgefallen, dass es ohne gesetztes timeout sogar ein drittes Event gibt, nämlich dann, wenn die Standardzeit (10s) abgelaufen ist und unabhängig davon, ob das Popup zuvor schon manuell geschlossen wurde.
2025-03-24 19:23:45 dummy popup_ctrl_test on   #Popup öffnen
2025-03-24 19:23:46 dummy popup_ctrl_test off       #Popup manuell schließen
2025-03-24 19:23:46 dummy popup_ctrl_test off       #zweiter Event (warum?)
2025-03-24 19:23:55 dummy popup_ctrl_test off       #dritter Event nach 10s (warum?)


Das hat zwar keinerlei weitere Auswirkungen, aber ich wüsste dennoch gern, warum das so ist und wie man das ggf. verhindern kann.
Hat jemand eine Idee? (@setstate vielleicht?)

Vielen Dank vorab.


Hier der lauffähige, aber vereinfachte Aufbau:
<ftui-grid base-width="26" base-height="26" margin="10">
  <ftui-grid-tile row="1" col="1" height="4" width="12">
    <ftui-button
      width="10em" height="2.25em" fill="outline" color="light" class="size-3"
      @click="sendFhem(`{dialogTest()}`)">Dialog Test
    </ftui-button>
  </ftui-grid-tile>
</ftui-grid>

<!-- Popup Test -->
<ftui-popup id="pop_test"
  [active]="popup_ctrl_test | map('on:true, off:false')"
  @close="sendFhem('set popup_ctrl_test off')">
  <header>
    <ftui-label text="Poupup-Dialog" size="3"></ftui-label>
  </header>
  <ftui-label text="Das ist ein Test" size="2"></ftui-label>
</ftui-popup>


sub dialogTest() {
  # setzt die Steuervariable für den TestDialog auf on
  # und ermöglicht öffnet so das Anzeigen des Dialogs
  fhem("set popup_ctrl_test on");
}
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-4B mit HM-CFG-LAN und viele weitere HM Komponenten, diverse Shellys, Tuya-Geräte, SMA und Solis Wechselrichter, Elgris EnergyManager, go-e Wallbox

setstate

ich vermute du hast irgendwo ein zweites <ftui-popup id="pop_test" im Code. Eventuell per Content reingekommen?

DocCyber

Nein, meine Popups sind alle zentral außerhalb bzw jenseits von </ftui-grid> angelegt, also ohne <ftui-content>
Und id=pop_test habe ich nur für die jetzige Problembeschreibung angelegt.

Das Problem tritt aber auch bei anderen Popups auf.
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-4B mit HM-CFG-LAN und viele weitere HM Komponenten, diverse Shellys, Tuya-Geräte, SMA und Solis Wechselrichter, Elgris EnergyManager, go-e Wallbox

DocCyber

Testhalber hab ich die id auf einen beliebigen anderen Wert gesetzt: id="pop-test159" - ändert nichts.
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-4B mit HM-CFG-LAN und viele weitere HM Komponenten, diverse Shellys, Tuya-Geräte, SMA und Solis Wechselrichter, Elgris EnergyManager, go-e Wallbox

DocCyber

Ich habe nun meine index.html von allem befreit, nur ein Button und ein Popup-Dialog ist noch drin. Der Befund bleibt:
Das Schließen des Dialogs löst immer ein doppeltes Event aus - reproduzierbar.

@setstate  Wäre schön, wenn du da noch mal hinsehen könntest.


Hier die index.html zum Testen:
<!DOCTYPE html>
<html>
<head>
  <script src="ftui.js"></script>
  <link href="ftui.css" rel="stylesheet">
  <link href="themes/ftui-theme.css" rel="stylesheet">
  <link href="favicon.ico" rel="icon" type="image/x-icon" />
  <meta name="viewport" content="width=device-width">
  <meta name="mobile-web-app-capable" content="yes">
  <meta name="toast_position" content="bottomLeft">
  <!-- verbose level 0-4 -->
  <meta name="debug" content="0">
</head>

<body>
  <ftui-grid base-width="26" base-height="26" margin="10">
    <ftui-grid-tile row="1" col="5" height="4" width="12">
      <!--ftui-button @click="sendFhem(`{dialogTest()}`)">Dialog Test</ftui-button-->
      <ftui-button @click="sendFhem('set popup_ctrl_test on')">Dialog Test</ftui-button>
    </ftui-grid-tile>
  </ftui-grid>

  <!-- Popup Test -->
  <ftui-popup id="pop_test"
    [active]="popup_ctrl_test | map('on:true, off:false')"
    @close="sendFhem('set popup_ctrl_test off')">
    <header>
      <ftui-label text="Dialog Test" size="3"></ftui-label>
    </header>
    <ftui-label text="Das ist ein Test" size="2"></ftui-label>
  </ftui-popup>
</body>

</html>
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-4B mit HM-CFG-LAN und viele weitere HM Komponenten, diverse Shellys, Tuya-Geräte, SMA und Solis Wechselrichter, Elgris EnergyManager, go-e Wallbox

tobi01001

Sicher dass du dich nicht selbst triggerst? also nicht du persönlich, sondern dein device:
[active]="popup_ctrl_test | map('on:true, off:false')"
    @close="sendFhem('set popup_ctrl_test off')">
Trenne doch mal das was du an fhem zurücksendest von dem was du in ftui empfängst und schau wieviele events kommen.
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

DocCyber

Zitat von: tobi01001 am 25 März 2025, 13:23:54Sicher dass du dich nicht selbst triggerst? also nicht du persönlich, sondern dein device:

Das müsste dann beim Einschalten auch passieren - ist der selbe Aufruf: set popup_ctrl on bzw. off
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-4B mit HM-CFG-LAN und viele weitere HM Komponenten, diverse Shellys, Tuya-Geräte, SMA und Solis Wechselrichter, Elgris EnergyManager, go-e Wallbox

setstate

Fehler gefunden. War ein Bug. Ich muss, wenn ein Event von außen kommt (dummy im FHEM ändert sich), überprüfen, ob nicht der Wert schon durch ein vorheriges Event (Close geklickt) gesetzt wurde. Dann muss nicht nochmal die Änderung publiziert werden.

DocCyber

Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-4B mit HM-CFG-LAN und viele weitere HM Komponenten, diverse Shellys, Tuya-Geräte, SMA und Solis Wechselrichter, Elgris EnergyManager, go-e Wallbox