Ich verstehe es nicht - fhemWidget im FHEMWEB

Begonnen von Prof. Dr. Peter Henning, 01 April 2018, 12:14:30

Vorheriges Thema - Nächstes Thema

Prof. Dr. Peter Henning

Kann mir mal bitte jemand erklären, warum der an FHEMWEB übergebene Code
  #-- div tag to support inform updates
    $ret .= '<div class="fhemWidget" informId="'.$name.'" cmd="" arg="doorpicalllist" dev="'.$name.'">';   
    if( exists($hash->{DATA}) ){
       $ret .= '<table class="block wide doorpicalllist">';   

(nachfolgende Tabelle semantisch und syntaktisch korrekt) als Ausgabe ein falsches Widget, nämlich ein selectWidget produziert (siehe Bild mit.png),


hingegen der bis auf ein Attribut identische Code
  #-- div tag to support inform updates
    $ret .= '<div informId="'.$name.'" cmd="" arg="doorpicalllist" dev="'.$name.'">';   
    if( exists($hash->{DATA}) ){
       $ret .= '<table class="block wide doorpicalllist">';   

mit derselben Tabelle als Ausgabe das korrekte Widget produziert, siehe Bild ohne.png ????

LG

pah


Ellert

Die Funktion FW_replaceWidgets aus fhemweb.js baut div-Tags mit der Klasse fhemWidget zu einem FHEM-Widget um, s. http://fhem.de/commandref.html#widgetOverride

Prof. Dr. Peter Henning

Das ist schon richtig, das ist auch nicht die Quelle meines Unverständnisses.

Aber: Erstens tut sie das bei genau diesem Modulcode auf meinem Produktivsystem nicht - so ist es ja auch ganz richtig, denn weder handelt es sich hier um ein Eingabefeld, noch wird irgendwo eine entsprechende JavaScript-Funktion explizit gerufen.

Und zweitens tut sie das eben doch auf einem frisch aufgesetzten FHEM-Testsystem.

Was also kann bewirken, dass bei gleichem HTML-Code FW_replaceWidgets in einem Fall nicht ausgeführt wird, im anderen Fall aber aus einer harmlosen HTML-Tabelle einen Selektor macht ?

LG

pah


rudolfkoenig

Kurz:
aus den gegebenn Informationen kann ich keine schluessige Antwort liefern.

Lang:
FW_replaceWidgets ist relativ komplex, ich versuche den Ablauf hier zu skizzieren
- alle div-Tags mit der Klasse fhemWidget werden untersucht
- anhad das arg Tags werden in FW_callCreateFn alle geladenen FW_widget Funktionen gefragt, ob sie sich zustaendig fuehlen
- falls nicht, und eine fhemweb_<arg[0]>.js Datei existiert, dann wird sie geladen, und dessen createFn ausgefuehrt.
- falls immer noch nichts gefunden wurde, dann dem arg ein "select," vorangestellt und FW_createSelect ausgefuehrt.
- FW_createSelect reagiert, falls im arg mindestens zwei Elemente vorhanden sind, und cmd nicht gefuellt ist
- falls auch FW_createSelect sich nicht zustaendig fuehlt, dann wird ein <a> Tag gebaut.

Ich gehe davon aus, dass ein fhemweb_doorpicalllist.js existiert (sonst waere es sinnlos die Klasse fhemWidget anzugeben). Evtl. ist die Datei nicht ueberall vorhaden, nicht ladbar, oder dessen createFn fuehlt sich nicht immer zustaendig, und deswegen kam FW_createSelect dran.

Prof. Dr. Peter Henning

OK, Danke, das hilft mir sehr viel weiter. Kann man den Text irgendwo ins Wiki stellen ?

LG

pah