NEWS
Javascript in VIS ausführen
-
Hallo,
ich versteht das Javascript bei VIS nicht bzw. ich JS in der VIS verwenden kann.
Ich möchte relativ simpel, die Farbe von zahlen werten ändern abhängig welcher wert gerade angezeigt wird. Denn JS Code habe für die Änderung und wird auch bei einer "normalen" HTML Seite auch Korrekt ausgeführt. Wenn ich aber den JS Code in dem Reiter Javascript in der VIS eintrage, wird er nicht ausgeführt.
Das Problem ist das auf die werte Änderung von dem jeweiligen Widget nicht reagiert wird.Als Bsp.:
$(".temparatur).on("change" function() { alert("Test")};
wird nicht ausgeführt. Wenn sich der Wert des Widget mit dem Namen temparatur ändert. Also der alert wird nicht ausgegeben.
Auch wenn ich das event auf "click" Ändere und auf das Widget klicke wird es nicht ausgelöst.Wo ist da mein Denkfehler?
-
zum einem fehlt ein anführungszeichen hinter temperatur
zum anderen
der name des widgets zählt hier nicht - .temperatur müßte eine class sein - punkt ist class, # ist id !!!
ein widget beispiel wäre:
$('#w00432').click(function () { alert("dd"); });
glaube nicht, dass du mit .temperatur automatisch den value ansprichst
du mußt über die chrome entwicklertools rausfinden, wie genau du das ansprechen kannst
beispiel:
in diesem fall wäre die "4" ein .text und die class .vis-widget-body - falls das jedoch öfter auf der seite vorkommt, bekommst du ein array zurück. du musst also dem widget noch eine class (.uuuuu) und nicht einen namen geben - dann solltest du den wert finden können
das alles ist eher kompliziert - du kannst die farben viiiel einfacher mit einem binding ändern welches du hier einsetzt:
beispiel für ein binding:
{val:alias.0.Allgemein.Aussentemperatur.Temperatur; val>=23 && val<29? "#D47DD7": val>=29? "red": "#0edd32"}
-
So wie @liv-in-sky beschrieben hat umsetzen.
Darüber hinaus gibt es noch folgendes Problem, dass das HTML unter Umständen zu dem Zeitpunkt, wo das Java Skript ausgeführt wird, noch nicht existiert.
Vis erzeugt die Widgets dynamisch. Bevor man ein Ereignishändler auf ein Element liegt, muss erst geprüft werden, ob es existiert. Sonst funktioniert es nicht. -
@liv-in-sky said in Javascript in VIS ausführen:
zum einem fehlt ein anführungszeichen hinter temperatur
zum anderen
der name des widgets zählt hier nicht - .temperatur müßte eine class sein - punkt ist class, # ist id !!!
ein widget beispiel wäre:
$('#w00432').click(function () { alert("dd"); });
glaube nicht, dass du mit .temperatur automatisch den value ansprichst
du mußt über die chrome entwicklertools rausfinden, wie genau du das ansprechen kannst
beispiel:
in diesem fall wäre die "4" ein .text und die class .vis-widget-body - falls das jedoch öfter auf der seite vorkommt, bekommst du ein array zurück. du musst also dem widget noch eine class (.uuuuu) und nicht einen namen geben - dann solltest du den wert finden können
das alles ist eher kompliziert - du kannst die farben viiiel einfacher mit einem binding ändern welches du hier einsetzt:
beispiel für ein binding:
{val:alias.0.Allgemein.Aussentemperatur.Temperatur; val>=23 && val<29? "#D47DD7": val>=29? "red": "#0edd32"}
Hallo,
sorry für die späte Rückmeldung.
Das Binding ist ein feine Sache, hat aber 2 Baustellen warum ich die Bindings dafür nicht benutzen möchte.- Binding macht alles etwas langsamer wenn man viel davon benutzt
- für den einsatzzweck denn ich vorhabe würde ich JS script und GUI Code vermischen, das Wiederstrebt mir innerlich etwas.
Mein vorhaben ist relativ simpel.
Ich möchte eine Temparatur anzeigen lassen, wobei sich die Schriftfarbe je nach Temparatur anpasst, heißt ist es 0 Grad soll die Farbe ins Blaue gehen ist es +40 Grad soll die Schrift "rot" sein. Da ich aber nicht einfach stumpf per if else das ganze machen möchte so mal ich bei 50 Temparaturwerten das auch nicht für eine gängige Lösung halte, Möchte ich das ganze per Berechnung der Farbwerte machen. Der Script wie gesagt funktioniert auch bei Klassichen HTML & JS. Aber leider eben nicht in VIS. Ich habe in dem Script auch ein entsprechendes Warten eingebaut, damit die Element fertig geladen sind bevor ich das eigentliche Script ausführe. -
ist etwas schwer dir zu helfen - wie sieht das funktionierende script aus ? und was auch nicht klar ist : wie werden die daten angezeigt (50?) wo kommen die her und welches widget macht die anzeige ?
ist das eine tabelle ? oder sind das 50 widgets ?
bei 50 werten, die jeweils eine eigene farbe (je nach wert) haben sollen, st der aufbau der anzeige schon interessant
-
Ich sehe, dass du nicht verstanden hast, was ich geschrieben habe
Für dein Anliegen ist binding die Lösung.
Alles andere ist um einiges aufwändiger, da du dich mit der inneren Funktionsweise von vis auseinandersetzen musst. Das funktioniert nicht wie andere normale HTML Zeiten. Wie gesagt, Widgets werden dynamisch von vis generiert.Wenn du dich mit der Developer Konsole deines Browser auskennst,
Kannst du gerne mal das Statementdebugger;
in deinem Java Skript platzieren und schauen, wann es genau ausgeführt wird.
Denn es wird ausgeführt wird, nur nicht unbedingt zu dem Zeitpunkt, den du benötigst.