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
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
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
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.
OK, Danke, das hilft mir sehr viel weiter. Kann man den Text irgendwo ins Wiki stellen ?
LG
pah