Polymer aktualisiert den Wert der Eigenschaft, der mit einer Methode berechnet wird

8

Wir arbeiten gerade an einem Projekt, bei dem wir eine Kombination aus AngularJS und Polymer verwenden.

Wir haben eine gewisse Struktur, aber was wirklich wichtig ist, ist dieser Code:

%Vor%

Wir haben eine Variable für $ scope namens dataContainer definiert, die in einem Controller gesetzt wird. Das Problem ist, dass dieser Code ausgeführt wird, bevor der Controller diese Eigenschaft vorbereitet, also nicht definiert ist - er löst Folgendes aus:

  

[dom-bind :: _ annotatedComputationEffect]: Berechne die Methode dataContainer.getSomeData() nicht definiert

Und die Daten werden nie wieder aktualisiert und es funktioniert nicht. Im Gegenteil, mit einer Eigenschaft funktioniert es (es spielt keine Rolle, ob der erste Zustand nicht definiert ist), es wird aktualisiert.

Weil es ein wirklich wichtiger Punkt in unserer Anwendung ist, wollen wir fragen. Wie erreiche ich das gewünschte Verhalten?

Danke, einen schönen Tag! :)

    
Juraj Mlich 30.09.2015, 21:05
quelle

2 Antworten

3

Ich bin nicht mit Polymer vertraut und wenn es Möglichkeiten gibt, die Ausführung des Polymercodes zu verzögern, oder wenn es Digest-Zyklen gibt, könnte man mit wie in AngularJS arbeiten.

Aber ich würde vermuten, dass Sie diese Art von Race Condition mit einem einfachen ng-if= in Verbindung mit <ng-include> auf der AngularJS-Seite vermeiden können - da es die Elemente nicht zum DOM hinzufügt und somit jede Art von Wechselwirkung mit Polymer vermeidet bis es enthalten ist.

So z.B.:

%Vor%

Und in template.html Ihr (unveränderter) Code:

%Vor%

Ich würde mich freuen, wenn Ihnen das hilft - aber wie gesagt, es ist nur eine Vermutung und ich weiß nicht viel über Polymer und wie es mit dem DOM interagiert.

    
conceptdeluxe 04.10.2015 14:37
quelle
2

Der Fehler, den Sie sehen, wird nicht dadurch verursacht, dass dataContainer nicht definiert ist, sondern die Funktion, die Sie aufrufen. Polymer unterstützt diese Art von Funktionsaufrufen in der Datenbindung nicht. Aus den Dokumenten :

  

Die Datenbindung bindet eine Eigenschaft oder Untereigenschaft eines benutzerdefinierten Elements (das Hostelement) an eine Eigenschaft oder ein Attribut eines Elements in seinem lokalen DOM (dem Kind- oder Zielelement).

Sie rufen eine Funktion für eine Eigenschaft auf, die nicht funktioniert. Wenn Sie eine Funktion aufrufen möchten, können Sie dies mit berechneten Bindungen .

%Vor%

Dies setzt jedoch voraus, dass Ihre Menüliste in ein übergeordnetes Polymerelement eingefügt wird, und ich bin mir nicht sicher, ob dies hier der Fall ist, wenn Sie dom-bind verwenden. Wenn Sie jedoch ein Elternelement haben, können Sie die berechnete Funktion dort hinzufügen.

%Vor%

getData wird immer aufgerufen, wenn sich der Datencontainer oder seine Untereigenschaften ändern.

    
Maria 06.10.2015 12:34
quelle

Tags und Links