Hallo zusammen,
ich habe für meine Sonos-Speaker eine kleine View erstellt, mit der ich die Speaker rudimentär steuern kann.
Jetzt habe ich links eine Art Nav-Leiste, mit der ich zwischen den Speakern umschalte, welcher gesteuert werden soll.
Dafür habe ich natürlich auch für jeden Speaker eine View gebaut. Die Buttons rufen nur die entsprechende View auf.
Um Ressourcen zu schonen dachte ich, es müsste doch möglich sein, die View nur 1x zu bauen und über die Buttons den zu steuernden Sonos zu setzen (z.B. über einen separaten DP).
ABER: Ich will die View auf mehreren Tablets zur Verfügung stellen und ich gehe von folgendem Problem aus:
Angenommen zwei Leute möchten "ihre" Lautsprecher steuern - da gibts doch dann eine Vermischung.
D.h. ich müsste beim Auswahl des Speakers die Instanz-ID des Browsers ermitteln und einen individuellen DP (z.B. unterhalb der InstanzID) mit dem Speaker "füttern" (das hat mal geklappt - aber ob auf Dauer zuverlässig?).
Dann bleibt noch das Problem, daß ich für jeden angesteuerten DP (Play, Stop, Vor, zurück) über die Instanz-ID den gewählten Lautsprecher ermitteln muß, damit ich den richtigen DP ändern kann.
(daß zwei Leute gleichzeitig den gleichen Speaker steuern wollen, schließe ich mal aus).
Das hat zu folgendem kranken DP-Eintrag (im HTML-Feld) geführt:
<b>SONOS {0_userdata.0.vSonos.{vid:vis.0.control.instance;vid.replace(".","_")}.Speaker2Control}</b>
was nicht funktioniert. Hier sollte nur der Speakername ausgelesen werden (replace benutzt, weil die InstanzID einen Punkt im Namen hat, hab die mit Unterstrich angelegt).
Abgesehen davon, würde ich das Konstrukt nächste Woche schon nicht mehr blicken
Ich habe aber eher das Gefühl, daß es einfacher geht und ich den Wald vor lauter Bäumen nicht sehe.
Hintergund ist einfach, daß ich nicht bei 8 Views jede Änderung durchführen will, wenn ich mal was ändern will.
Sondern es soll nur eine View geben und jeder soll seinen Speaker steuern können
Hat jemand eine Idee, wie das zuverlässig gelöst werden kann?
Viele Grüße,
Andreas
edit:
Dieses Konglomerat
<b>SONOS {vid:vis.0.control.instance; "0_userdata.0.vSonos."+vid.replace(".","_")+".Speaker2Control"}</b>
hat mich jetzt dem obigen Ansatz etwas näher gebracht. Heraus kommt jetzt genau der String, der den Datenpunkt beinhaltet. Allerdings steht der "nur" als Text in der Runtime. Wenn ich die geschweiften Klammern mitgebe, taucht nur noch 0} auf.
Habe versucht die geschweiften Klammern mittels Backslash zu escapen - hat aber auch nichts gebracht.
Kann man überhaupt ein Binding in einem Binding verwenden? Ich glaube, das beschreibt das Problem beim Generieren der Datenpunkt-ID.