[BEANTWORTET] Wie kann ich JS für eine variable Widget-Defintion verwenden?

Begonnen von DocCyber, 22 August 2016, 14:24:06

Vorheriges Thema - Nächstes Thema

DocCyber

Guten Tag, Forum!

Für meine Rolladen-Steuerung (u.a.) würde ich in meinen Widgets gern Variablen bzw JavaScript einsetzen, also z.B. data-device="<ein variabler Wert>"
Heißt der Rolladen-Aktor zum Beispiel ra1_Kueche, möchte ich das durch Verwendung von rollo[1][0] erreichen (vgl. Anhang):

<table>
  <td>
    <div data-type="label"
      data-device="<script>document.write(rollo[1][0]);</script>"
      data-get="level"
      class="medium white">
    </div>
  </td>
</table>


Die Variablen liegen in einer Javascript-Datei.
Leider klappt das so nicht, was ich auf meine dürftigen JS-Kenntnisse zurückführe.
Kann mir jemand helfen?

Vielen Dank!


Anhang:
Die JS-Datei (rolloPosition.js) habe ich im <head>-Abschnitt meiner index.html eingebunden.

        ....
<script src="lib/jquery.gridster.min.js"></script>
<script src="js/fhem-tablet-ui.js" defer></script>
<script src="rolloPosition.js"></script>
        ....


In der Datei rolloPosition.js steht lediglich eine Array-Definition - sonst nichts. Eventuell liegt es daran?

var rollo = new Array(7);
rollo[0] = new Array("ra Name",        "20%-Pos", "40%-Pos", "60%-Pos", "80%-Pos");
rollo[1] = new Array("ra1_Kueche",     "11",      "22",      "34",      "48");
rollo[2] = new Array("ra2_Essbereich", "11",      "23",      "36",      "53");
rollo[3] = new Array("ra3_Kamin",      "12",      "25",      "39",      "56");
rollo[4] = new Array("ra4_TerrasseA",  "13",      "24",      "37",      "51");
rollo[5] = new Array("ra5_TerrasseB",  "12",      "23",      "37",      "52");
rollo[6] = new Array("ra6_Wohnzimmer", "12",      "22",      "37",      "52");
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-4B mit HM-CFG-LAN und viele weitere HM Komponenten, diverse Shellys, Tuya-Geräte, SMA und Solis Wechselrichter, Elgris EnergyManager, go-e Wallbox

setstate

Durch die Anführungszeichen wird der Script Tag als Literal interpretiert und nicht als ausführbarer Code.

data-device="<script>do

Du müsstest den gesamten div Teil per document.write schreiben.

<script>document.write('<div ... data-device="' + rollo[0][1] + '" class="bla"></div>');</script>

DocCyber

Danke für deine Antwort.

Ich habe deinen Lösungsvorschlag ausprobiert. Leider klappt das trotzdem nicht. Es sieht vielmehr so aus, als ob der gesamte Ausdruck in document.write völlig ignoriert wird.
Das ist selbst dann der Fall, wenn ich einfach nur "Hallo" schreiben will:

<body>
<script>document.write("Hallo!");</script>
<div class="page" id="rollos"> <div class="gridster">
  <ul>
  ...



In einem sehr schlichten Test-HTML-Dokument (also außerhalb jeglicher FTUI-Umgebung etc.) funktioniert es hingegen:

<!doctype html>
<html>
  <head>
    <script src="rolloPosition.js"></script>
  </head>
  <body>
    Name des Rollo-Aktors: <script>document.write(rv(3, 0));</script>
  </body>
</html>



Könnte es sein, dass die Ausführung von document.write durch irgend etwas "innerhalb der FTUI-Umgebung" unterbunden wird?



Kleiner Nachtrag:
Ich habe die JS-Datei rolloPosition.js etwas abgeändert und die Funktion rv eingebaut, welche den Wert eines Elements der zweidimensionalen Matrix zurück gibt:
  function rv(nr, idx)
  // rv = RolloValue
  { var rollo = new Array(7);
     rollo[0] = new Array("ra Name",        "20%-Pos", "40%-Pos", "60%-Pos", "80%-Pos");
     rollo[1] = new Array("ra1_Kueche",     "11",      "22",      "34",      "48");
     rollo[2] = new Array("ra2_Essbereich", "11",      "23",      "36",      "53");
     rollo[3] = new Array("ra3_Kamin",      "12",      "25",      "39",      "56");
     rollo[4] = new Array("ra4_TerrasseA",  "13",      "24",      "37",      "51");
     rollo[5] = new Array("ra5_TerrasseB",  "12",      "23",      "37",      "52");
     rollo[6] = new Array("ra6_Wohnzimmer", "12",      "22",      "37",      "52");
     return rollo[nr][idx];
}

Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-4B mit HM-CFG-LAN und viele weitere HM Komponenten, diverse Shellys, Tuya-Geräte, SMA und Solis Wechselrichter, Elgris EnergyManager, go-e Wallbox

setstate

</head>
<body>
<script>document.write("Hallo!");</script>
    <div class="gridster">


geht bei mir, ich sehe das Hallo! oben in der Mitte

DocCyber

Bei mir geht's im FTUI-Kontext leider definitiv nicht.  :(
Kann es damit zusammenhängen, dass document.write auf einer sub-page (<div class="page" id="rollos">) ausgeführt werden soll?
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-4B mit HM-CFG-LAN und viele weitere HM Komponenten, diverse Shellys, Tuya-Geräte, SMA und Solis Wechselrichter, Elgris EnergyManager, go-e Wallbox

setstate

Bingo!

Bei Unterseiten werden keine Seiten-Skripts ausgeführt.

http://api.jquery.com/load/

Siehe Abschnitt Script Execution.

DocCyber

schade...wäre so schön gewesen.
Da muss ich mir wohl etwas anderes einfallen lassen.
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-4B mit HM-CFG-LAN und viele weitere HM Komponenten, diverse Shellys, Tuya-Geräte, SMA und Solis Wechselrichter, Elgris EnergyManager, go-e Wallbox