2016-07-11 5 views
0

Siehe hier twiddle: https://ember-twiddle.com/2150099882893760cef237ff2bd22e85Ember auf individuelle Bindungsobjekte

Grundsätzlich in crit-service ich schaffen Ember "Crits" und "Crit" Objekte, und füllen sie mit einigen Daten.

Die crit-service wird von zwei verschiedenen Komponenten verwendet, die grundsätzlich das Gleiche tun: Anzeige der Crits.

Das Problem ist, dass die "Ändern" -Schaltflächen nicht funktionieren. Beim Debuggen sehe ich, dass die Werte geändert werden, aber die Ansicht wird nicht aktualisiert. Warum ist das? Da Ember.Object Observable ist, sollte kein Wert gesetzt werden, um die Vorlage zu benachrichtigen? Und vor allem, wie kann ich das zum Laufen bringen?

P.S. Ich habe einen Workaround gesehen, indem ich Ember.A() anstelle von Objects verwendet habe. Dies würde jedoch einen Textbaustein hinzufügen, da mein Datenmodell tatsächlich Objekte und keine Arrays aus Schlüssel/Wert-Paaren sind.

Antwort

1

Dies scheint ein Problem mit dem Helper {{#each-in}} zu sein, der Änderungen nicht neu lädt. Eine schnelle Lösung ist es, den {{get}} Helfer zu verwenden.

Anstatt also diese:

{{#each-in obj as |key val|}} 
    {{key}}={{val}} 
{{/each-in}} 

tun:

{{#each-in obj as |key|}} 
    {{key}}={{get obj key}} 
{{/each-in}} 

Dies wird jedoch nie funktionieren, wenn Sie zusätzliche Eigenschaften hinzufügen.

here ist ein funktionierender Twiddle mit dieser Lösung.


Eine andere Lösung, die immer funktioniert ist .rerender() auf der Komponente zu nennen. Dies ist dank des Glimmers, der nur die Teile des DOM aktualisiert, die sich geändert haben, sicher. Sie müssten es jedoch auf Ihrer gemeinsamen Stammkomponente der beiden Komponenten oder auf beiden Komponenten aufrufen.

+0

Was meinen Sie mit "zusätzliche Eigenschaften hinzufügen"? Meinst du, zusätzliche Eigenschaften dynamisch hinzuwerfen, z. crit.set ("newProp", "newVal")? Übrigens, ich habe versucht, überall in der Vorlage zu addieren, aber es funktioniert immer noch nicht ... kannst du einen funktionierenden Twiddle bereitstellen? – Kricket

+0

@yes, ich meine genau das. Ich aktualisierte meine Antwort mit einem Dreh. – Lux

+0

OK, danke! Jetzt muss ich herausfinden, warum es für mich nicht funktioniert hat ... – Kricket