Erzwingen, wie bindend in Aurelia neu bewertet oder neu gerendert wird

8

Ich beginne mit einer einfachen TODO App mit Aurelia, RethinkDB & amp; Sockel.IO. Ich habe Probleme mit der Neuberechnung oder Neubewertung eines Objekts, das über Socket.IO geändert wurde. Im Prinzip läuft also alles gut auf dem ersten Browser, wird aber nicht im zweiten Browser neu gerendert, während das Objekt in der Konsole Unterschiede in meinem Objekt anzeigt. Das Problem ist nur beim Aktualisieren eines Objekts, es funktioniert perfekt beim Erstellen / Löschen von Objekten aus dem Array von Todo-Elementen.

HTML

%Vor%

NodeJS mit RethinkDB changefeeds

%Vor%

Aurelia-Code beobachtet Socket.on

%Vor%

Der socket.on("todo_update", ...){} lässt den zweiten Browser nicht erneut rendern, aber das Objekt vor und nach der Aktualisierung in der Konsole zeigt Unterschiede im Objekt selbst. Ich habe sogar die Todo-Titel-Eigenschaft geändert, und auch das wird nicht neu gerendert.

Wie kann ich Aurelia in meinem zweiten Browser mit den neuen Objekteigenschaften rendern lassen? Sei nicht zu hart zu mir, ich lerne Aurelia / RethinkDB / NodeJS / Socket.IO zur gleichen Zeit ...

    
ghiscoding 04.04.2016, 04:04
quelle

1 Antwort

16

Aurelia beobachtet Änderungen am Inhalt eines Arrays, indem es die Mutator-Methoden des Arrays (Push, Pop, Splice, Shift usw.) überschreibt. Dies funktioniert gut für die meisten Anwendungsfälle und funktioniert sehr gut (keine Dirty-Checking, extrem leicht in Bezug auf Speicher und CPU). Leider bleibt dadurch ein Weg frei, ein Array zu mutieren, das Aurelia nicht "sehen" kann: indexierte Zuweisung ... zB myArray[6] = 'foo' . Da keine Array-Methoden aufgerufen wurden, weiß das Bindungssystem nicht, dass das Array geändert wurde.

Versuchen Sie in Ihrem Fall, dies zu ändern:

%Vor%     
Jeremy Danyow 04.04.2016, 18:15
quelle