Bedienung aus Detailansicht (JavaScript dahinter) -> aus Roomansicht nicht

Begonnen von HomeAuto_User, 10 August 2019, 11:24:01

Vorheriges Thema - Nächstes Thema

HomeAuto_User

Hallo,
hoffentlich bin ich hier richtig :-), wenn nicht Sorry für die schwere "Eingliederung des Themas".

Ich bin gerade dabei ein Modul zu entwickeln was im Prinzip einer Umsetzung von Schaltuhr mit Übersicht entsprechen soll.
Das ganze ging ich mal an weil ich ungern bei 20 Timern 20 at oder doif besitzen wollte.

Bei der Gestaltung der Oberfläche stoße ich nun auf eine Stelle, wo ich meine Funktionen und Bedienungen in der Detailansicht vornehmen kann.
Sobald ich aber eine Stufe höher bin in der Roomansicht, so erhalte ich dann die Aussage

Zitatfhem?room=Timer line 1:
TypeError: onClickTimer is not a function

Im Prinzip ist mir es ja klar wieso, da die Funktion im Part attr2html eingetragen ist wo ich meine Ansicht zusammen baue.
Welche Möglichkeiten habe ich um dies umzusetzen.

Funktionsaufruf:
Zitat$html.= "<td style=\"text-align:center\"><select id=\"".$i."\" name=\"onClickTimer\" onChange=\"onClickTimer()\">" if ($i == 1);   # id need for java script

Alternative welche funktioniert aber nur ein Reading geschrieben werden könnte:
Zitatmy $changecmd = "cmd.$name=setreading $name DDSelected";
$html.= "<td style=\"text-align:center\"><select id=\"".$i."\" name=\"onClickTimer\" onchange=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$changecmd ' + this.options[this.selectedIndex].value)\">" if ($i == 1);   # id need for java script

Wie könnte ich den Alternativ-Aufruf umschreiben, das ich dort eine Funktion im Modul (Perlcode) aufrufen kann  ::) ?

Ich erbitte Hilfe.

EDIT: Mich macht nur stutzig, das in beiden QuellCodes die Funktion anzutreffen ist.
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

rudolfkoenig

ZitatTypeError: onClickTimer is not a function
Ich bekomme keine Fehlermeldung: kannst du bitte eine genaue Anleitung schreiben?


ZitatEDIT: Mich macht nur stutzig, das in beiden QuellCodes die Funktion anzutreffen ist.
Wenn damit gemeint ist, dass die FW_detailFn Funktion sowohl in der Uebersicht, wie auch in der Detailansicht aufgerufen wird: ja, das ist der Fall, wenn man im Modul FW_addDetailToSummary gesetzt hat.

Nachtrag: Bitte in der Ueberschrift Java durch JavaScript ersetzen, sonst kommt man auf falsche Ideen.

HomeAuto_User

Hallo Rudolf,

danke für deine Antwort.

Zitat von: rudolfkoenig am 10 August 2019, 12:30:34
Nachtrag: Bitte in der Ueberschrift Java durch JavaScript ersetzen, sonst kommt man auf falsche Ideen.

Wurde erledigt und geändert.

Zitat von: rudolfkoenig am 10 August 2019, 12:30:34
Ich bekomme keine Fehlermeldung: kannst du bitte eine genaue Anleitung schreiben?

Wenn damit gemeint ist, dass die FW_detailFn Funktion sowohl in der Uebersicht, wie auch in der Detailansicht aufgerufen wird: ja, das ist der Fall, wenn man im Modul FW_addDetailToSummary gesetzt hat.


Im Modul ist FW_addDetailToSummary gesetzt.

Vorgehensweise zum Fehler weil ich es nicht richtig erläutert hatte.  :o SORRY
- Modul definiert (define Timer Timer)
- "klick" save config
- "klick" auf Raum Timer
- "klick" auf Button Speichern
- reload der Webseite
- "klick" auf DropdownFeld "Timer" und Änderung auf den neuen Wert 01
--> Fehler

fhem?room=Timer line 1:
TypeError: onClickTimer is not a function


Wenn wir das Ganze nun innerhalb der Detailansicht machen OHNE auf die Raumansicht zu wecheln geht.
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

rudolfkoenig

ZitatWurde erledigt und geändert.
Ich sehe da noch Verbesserungsbedarf :) JavaScrit => JavaScript

Zum Problem: ich muss leider zugeben, dass ich die Ursache nicht erklaeren kann.
Ich kann nur einen Workaround anbieten: statt onclick im HTML zu setzen, wuerde ich die Funktion in JS direkt "dranhaengen":        $("[name=onClickTimer]").click(function(){
                FW_cmd(FW_root+ \'?XHR=1"'.$FW_CSRF.'"&cmd={FW_DropDownClick("'.$name.'","\'+myDropdown.value+\'")}\');
        });

Btw.: Bist du sicher, dass du onclick und nicht onchange haben willst?

HomeAuto_User

Hallo,

Zitat von: rudolfkoenig am 10 August 2019, 15:31:21
Zum Problem: ich muss leider zugeben, dass ich die Ursache nicht erklaeren kann.

Das ist natürlich blöd wenn wir nicht wissen wieso dort es dazu kommt. :-(

Zitat von: rudolfkoenig am 10 August 2019, 15:31:21
Ich kann nur einen Workaround anbieten: statt onclick im HTML zu setzen, wuerde ich die Funktion in JS direkt "dranhaengen":        $("[name=onClickTimer]").click(function(){
                FW_cmd(FW_root+ \'?XHR=1"'.$FW_CSRF.'"&cmd={FW_DropDownClick("'.$name.'","\'+myDropdown.value+\'")}\');
        });

Btw.: Bist du sicher, dass du onclick und nicht onchange haben willst?

Ich habe nun mal den Workaround von dir getestet und dies würde gehen. Es wird da zwar einmal mehr "aktualisiert" sobald man auf das Dropdownfeld klickt und zusätzlich beim nächsten Klick auf den neuen Timer aber das Prinzip funktioniert auf beiden Darstellungen (Roomseite und Detailseite).

Für die weitere Umsetzung zuggleich eine Frage,
ist es möglich aus einer PERL Sub in eine Java function zu springen?

MfG
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

rudolfkoenig

Zitatist es möglich aus einer PERL Sub in eine Java function zu springen?
Ceterum censeo: JavaScript und nicht Java.
Die meisten Programmierer der einer Sprache halten wenig von der anderen Sprache (und deren Programmierer).

Du musst bedenken, dass dein Perl Code auf dem Server, und dein JavaScript Code im Browser laeuft, und der Browser nicht immer da ist.
Man kann zwar "springen", ist aber aufwendig, und laeuft ueber Nachrichtenaustausch, Stichwort longpoll.
Siehe auch asyncOutput.