NEWS
Objekt-Binding und Gruppierung
-
Hallo Forum,
die Funktion des Objekt-Bindings im Vis-Editor ist wirklich sehr hilfreich. Ich ändere beispielsweise damit die Opacity eines Widgets mit einem Skript, damit bekommt man wirkliche ansehnliche Effekte hin (Bsp.: opacity: {javascript.0.opacity;/(100)};).
Ich bin noch recht neu in Sachen CSS, HTML und JS, verstehe ich es daher richtig: Wenn über Objekt-Binding eine Eigenschaft eines Widgets aktualisiert wird, wird das Widget dann ganz zerstört und mit den neuen Eigenschaften neu gebaut?
So wirkt es zumindest in meinem Fall: Wenn ich Widgets mit Objekt-Binding gruppiere, so werden alle Eigenschaften des betroffenen Widgets aktualisiert und das außerhalb der Gruppierung. Daraus folgt bspw., dass das Sichtbarkeitsobjekt der Gruppe nicht mehr die Sichtbarkeit des aktualisierten Widgets steuert, obwohl es eigentlich Bestandteil der Gruppe sein sollte, oder dass bei der Aktualisierung der Höhe und Breite des Widgets die Werte mit Bezug auf die Gruppe nun auf die Gesamtansicht bezogen werden (-> falsche Position und Größe des Widgets, v.a. bei prozentualen Angaben).
Gibt es eine Möglichkeit bei der Aktualisierung eines Widgets durch Binding
(a) nur die entsprechende Eigenschaft zu aktualisieren und alles andere beizubehalten, oder
(b) bei der Aktualisierung eines Widgets eine mögliche Gruppierung zu berücksichtigen und nötige Eigenschaften entsprechend anzupassen, oder
die Aktualisierung der gesamten Gruppe zu triggern, damit die gesamte Gruppe mit den neuen Eigenschaften neu gebaut wird?
Ich bin für jede Hilfe dankbar.
Viele Grüße,
KE
Object-Binding: https://github.com/ioBroker/ioBroker.vi ... of-objects
-
@kilian-egmx-de Ich habe dasselbe Problem. Wenn ich die Textfarbe innerhalb einer Gruppe mit einer Bindung...
{h:sonoff.0.DVES_9F102D.POWER; h == 'true' ? '#33CC33' : '#FF0000'}
... setze und sich der Wert ändert, dann ändert sich auch die Textfarbe, aber anstelle des Textes steht "groupAttr3" (enthält den Text) und das auch noch horizontal verschoben.
Gibt es dafür eine Lösung?
Vielen Dank!
-
@kilian-egmx-de
Ich habe genau das gleiche Problem. Bin aber auch noch recht neu im Thema vis.
Da das Thema unbeantwortet schon etwas steht, habt ihr eine Lösung (außer die Gruppierung aufheben) gefunden?
Bin für alle Hilfestellungen dankbar.Viele Grüße
Tobi -
@tobito
@kilian-egmx-de
@survivorKönnt ihr bitte ein möglichst einfaches Beispiel erstellen, bei dem es nicht funktioniert und die Gruppe/Widgets exportierend hier posten.
Ein bisschen Beschreibung was in welchem datenpunkt des Beispiels drin steht wäre auch nicht schlecht.
Dann kann man das einmal nachstellen um zu schauen wo das Problem liegt. -
Hallo Oliverio,
vielen Dank für die schnelle Reaktion
Ich habe mit mehreren basic-HTML Widgets je ein binding eines Homematic Datenpunktes für eine Heizung eingebunden und die Widgets gruppiert.
Klappt super. Aber nach kurzer Zeit "springen" die Werte bzw. vermutlich die Widgets an eine andere Stelle des Bildschirms. Ein Neuladen der Website behebt das Problem nur kurzzeitig.
Ich habe Dir mal eine Gruppierung exportiert, es tritt aber zeitversetzt an allen gruppierten Widgets mit bindings auf.
Es ist übrigens nicht auf Homematic Datenpunkte einzugrenzen, Es tritt generell auf, sobald ich die bindings gruppiert habe. Auch mit Position "relativ" (bei CSS Allgemein) habe ich keinen Erfolg gehabt.Gruß
Tobi -
puh, kannst du das vereinfachen. da sind ja widgets aus anderen adaptern drin.
ich habe den materialdesign-adapter nicht.wenn du das nachstellen kannst mit so wenig standard widgets (also die bei iobroker mitgeliefert werden) wie möglich. dann kann ich mal schauen.
auch habe ich kein homematic, mit dem ich die widgets mal schnell verbinden kann.
daher bitte eigene datenpunkte erstellen und mir die benennen das ich die hier nachstellen kann. als name, typ inhaltsonst wird das zu schwierig nachzustellen, ob der fehler in vis liegt.
oder evtl am materialdesign -
ich habe jetzt einfach 3 basic-HTML Widgets mit Datenpunkten bindings ausgestattet und gruppiert.
Wenn ich einen Datenpunkt mit einem neuen Wert setze (Wert egal) wird er in der Visualisierung ganz oben links angezeigt, er "springt" also aus der gruppierten Position.Grüße Tobi
-
@oliverio sagte in Objekt-Binding und Gruppierung:
Ein bisschen Beschreibung was in welchem datenpunkt des Beispiels drin steht wäre auch nicht schlecht.
Dann kann man das einmal nachstellen um zu schauen wo das Problem liegt.ok der erste Teil hast du geliefert.
Bitte noch den 2.Teil
Bin leider kein Hellseher
Am besten Copy/Paste fähig, so das ich nicht so lange brauche das Beispiel aufzubereiten -
Hallo
nur zur Info, für das zerreissen der Gruppierungen gibt es bereits ein Issue!
Könnte vielleicht interressant sein -
Ich hatte in meinem 2.Beispiel unterschiedliche Inhalte des Datenpunkts ausprobiert (string, number, boolean). Das scheint keinen Einfluss auf das beschriebene Verhalten zu haben.
-
@tobito du sollst mir eine liste der verwendeten datenpunkte und den inhalt benennen, damit ich das schnell und einfach nachstellen kann.
aber mittlerweile wird es aufgrund der ganzen rumschreiberei auch schon wieder sehr aufwändig.
wahr scheinlich ist es der issue, der gerade bénannt wurde -
@oliverio
Sorry, hier die Datenpunkte:
0_userdata.0.Visualisierung.Farben.Thema_1_dunkel.Backgrnd_main
0_userdata.0.Visualisierung.Farben.Thema_1_dunkel.Backgrnd_sub
0_userdata.0.Visualisierung.Farben.Thema_1_dunkel.Text_main(Wert der Datenpunkte egal, ich hatte z.B. string, „Test“ eingegeben, Problem tritt bei Änderung des Wertes auf)
Grüße
Tobi -
@fritzke316
Ja, scheint das gleiche Thema zu sein. Danke für den Hinweis:)Grüße
Tobi -
@tobito
@kilian-egmx-de
@survivorhabe das Problem in vis identifizieren können.
Habe allerdings noch keine wirkliche Lösung.
Bei Änderung weiß das Widget nicht das es zu einer Gruppe gehört.
Daher wird das falsche HTML-Element (die View) gewählt, an dem das HTML-Element mit dem neuen Inhalt hinzugefügt wird. Wenn der FunktionrenderWidget, aufgerufen von der Funktion reRenderWidget die richtige GroupID mitgegeben würde, dann funktioniert es.
Leider ist der Teil, der eigentlich die GroupID ermitteln soll für mich so nicht verständlich und wahrscheinlich komplett falsch (fett markiert)this.renderWidget(viewDiv, view, widget, !this.views[viewDiv] && viewDiv !== widget ? viewDiv : null);
Zur Ermittlung der GroupID gibt es nun 2 Möglichkeiten:
- Man fügt die groupID den jeweiligen Widget-Daten hinzu
- Man durchsucht alle Widgetdaten, bei denen die IDs mit "g" anfangen und schaut ob die aktuelle widgetID darin enthalten ist.
Mal schauen, wann das gefixed wird
-
@oliverio
Vielen Dank für deine Analyse und Unterstützung.
Ich hoffe es wird bald gefixt.Viele Grüße
Tobi -
Vielleicht wäre es gut wenn ihr noch einen Kommentar im Issue hinterlässt, ich warte schon länger darauf, dass es gefixt wird!!
-
ich habe hier mal einen fix als pull request gestellt mit dem es bei mir behoben ist.
https://github.com/ioBroker/ioBroker.vis/pull/456 -
Ab Adapter Version vis 1.4.11
Scheint mein fix enthalten zu sein.
Bitte prüft mal bitte gründlich ob das so passt.
Leider sind bei vis irgendwelchen Seiteneffekte nicht
Auszuschließen. -
@oliverio
Erst mal ein herzliches Dankeschön! Tolle Arbeit.
Mir ist folgendes aufgefallen:- Bereits erstelle Gruppierungen bleiben von dem Fix unverändert. Auch das Bearbeiten oder Kopieren/Neueinfügen der Gruppierung hilft dabei nichts.
- Bei neu erstellten Gruppierungen löst der Fix bei mir das Problem.
Testsystem:
Raspi4B 4GB
vis v1.4.12
web v4.1.1
iobroker wurde nach update neu gestartet, Webbrowser Cache geleert, neu gestartet -
@tobito
das ist korrekt.
die Lösung war, das sich jedes widget merkt, zu welcher gruppe es gehört.
das passiert beim gruppieren.für vor 1.4.11. gruppierte widgets fehlt die information immer noch,
aber durch entfernen der gruppierung und gleich wieder gruppieren wird das behoben.danke fürs testen