NEWS
[Frage] Scripte/jQuery
-
Hallo,
ich baue mir gerade in .vis ein Keypad um nach Code-Eingabe ein Programm zu starten. Prinzipiell funktioniert das schon. Ich bin jedoch über folgendes gestolpert:
Ich möchte mein Problem mal beispielhaft an dem Code aus der Doku festmachen und nicht an meinem konkreten Anwendungsfall.
In der Doku steht folgendes:
` > Skripte
Hier kann das Standardverhalten von Widgets geändert werden. Bei dem Einsatz dieses Werkzeugs sollte der Anwender wirklich gut im CSS/Javascript/jQuery sein um es machen zu können. Dieses Skript wird zusammen mit dem View geladen.
z.B. beim Klick auf jedes Widget sollte ein Sound abgespielt werden:
setTimeout(function () { $('.vis-widget').click(function () { var audio = new Audio('http://download.iobroker.net/usedForVisDocumentationBell.mp3'); audio.play(); }); }, 2000); ```` `
Ich vermute setTimeout() wird hier verwendet, um das click-Event erst etwas verzögert an die Elemente zu binden, da diese direkt bei document.ready noch nicht gefunden werden, oder?
Ohne setTimeout() funktioniert es nicht. Mit setTimeout() erstmal schon, allerdings dann nicht mehr, wenn das Widget (welches das Script enthält) nicht direkt im "Startview", sondern erst nach einem Wechsel des Views geladen wird.
Mein Lösung (mit der ich aber nicht wirklich zufrieden bin) sieht wie folgt aus:
Ich habe meinen js-Code in eine externe js-Datei ausgelagert und diese datei in der index.html verlinkt. In dieser js-Datei steht dann:
$(document).on('click', '.vis-widget', function(){ var audio = new Audio('http://download.iobroker.net/usedForVisDocumentationBell.mp3'); audio.play(); });
Das Event wird also an document gebunden, da es .vis-widget' ja im DOM erstmal noch nicht gibt.
Dazu zwei Fragen:
1. Gibt es eine bessere Lösung als das Auslagern des Codes in eine Datei?
2. Wenn ich meine .js-Datei editiere, werden die Änderungen nicht direkt sichtbar. ioBroker scheint diese Dateien zu cachen. Wie kann ich diesen Cache deaktivieren bzw. leeren ohne ioBroker neu starten zu müssen?
Vielen Dank
Jens
-
wo hasten du den Code eingebuden ??
global ??
-
wo hasten du den Code eingebuden ??
global ?? `
Im betreffenden widget ganz rechts im Reiter "Scripts".Gesendet von meinem Nexus 5X mit Tapatalk
-
wo hasten du den Code eingebuden ??
global ?? `
Im betreffenden widget ganz rechts im Reiter "Scripts".Gesendet von meinem Nexus 5X mit Tapatalk `
ach jetzt hab ich es verstanden… du bindest den Code an ein Widget ... dann ist es wohl logisch, dass es nur auf der einen View funktioniert...
javascript adapter installieren und klimper den code da ein
-
Ok, werde ich versuchen. Das Problem ist allerdings, dass der Code im Widget eben gerade nicht funktioniert, wenn das widget in einem view ist, das nicht das "Hauptview" ist, sondern erst später angezeigt wird.
-
javascript adapter installieren und klimper den code da ein `
Hab ich leider noch nicht ganz verstanden. Mir fehlen da einfach noch paar Basics. Scripte im Javascript-Adapter einfügen habe ich hin bekommen aber wie "kommt" das Script dann in meine .vis-Oberfläche? D.h. es muss ja beim Aufruf meines Views mit geladen werden…
Danke
Jens
-
Hallo Jens,
@nevermind:wie "kommt" das Script dann in meine .vis-Oberfläche? `
Hier: http://www.iobroker.net/?page_id=2754&l … Sidebar_15Reiter Skripte, dann hier http://www.iobroker.net/?page_id=2754&lang=de#Skripte eintragen.
es muss ja beim Aufruf meines Views mit geladen werden… `
und genau das passiert dannGruß
Rainer
-
hmpf … ich weiß nicht wie ich es genauer beschreiben kann, Rainer. Genau so (Sidebar -> Skripte) funktioniert es eben nicht, sofern das View nicht das "Startview" ist.
setTimeout(function () { $('.vis-widget').click(function () { var audio = new Audio('http://download.iobroker.net/usedForVisDocumentationBell.mp3'); audio.play(); }); }, 2000);
An diesem Beispielcode: Es macht nun in meinen "Startview" immer "Ping" wenn ich irgendwo draufklicke. Nun wechsel ich vom Startview in ein anderes View (z.B. von Erdgeschoss-Ansicht zu OG-Ansicht). Hier macht nun nichts mehr Ping. Auch dann nicht, wenn ich das Beispielskript im Skript-Reiter der Obergeschoss-Ansicht einfüge. Rufe ich die Obergeschoss-Ansicht direkt über den Browser auf und nicht aus dem anderen View, macht es auch hier Ping.
-
Servus zusammen,
wurde dieses Problem bisher gelöst?
Habe genau das gleiche Problem. Das Skript direkt im Java Adapter habe ich bisher nicht mal zum laufen gebracht…
Gibts hier neue Erkenntnisse?
Grüße
Lumpe