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");
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>
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];
}
</head>
<body>
<script>document.write("Hallo!");</script>
<div class="gridster">
geht bei mir, ich sehe das Hallo! oben in der Mitte
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?
Bingo!
Bei Unterseiten werden keine Seiten-Skripts ausgeführt.
http://api.jquery.com/load/
Siehe Abschnitt Script Execution.
schade...wäre so schön gewesen.
Da muss ich mir wohl etwas anderes einfallen lassen.