2013-03-06 9 views
17

In Ember scheint die Definition einer Eigenschaft als berechneter Alias ​​für eine andere Eigenschaft (oder die Eigenschaft eines anderen Objekts) unter Verwendung von Ember.computed.alias('otherProperty') grundsätzlich dasselbe Ergebnis zu haben wie die Definition als Bindung an diese Eigenschaft unter Verwendung von propertyNameBinding: 'otherProperty'.Was ist der Unterschied zwischen Ember.computed.alias und einem Ember.binding?

Ich habe mir die Quelle und die Dokumentation angeschaut, aber ich kann keinen Grund finden, warum einer dem anderen vorzuziehen wäre. Offensichtlich verwenden Schablonen Bindungen, was in Ordnung ist, aber für Eigenschaften in z.B. Controller oder zum Verweisen auf die Eigenschaft eines Controllers in einer Ansicht gibt es einen Unterschied?

Antwort

14

Ein Alias ​​kann bei extend() überschrieben werden, wodurch die Beziehung mit dem anderen Schlüssel vollständig aufgehoben wird.

Ein kurzes Beispiel: Ich habe eine Klasse von zeitbezogenen Funktionen und Klassen und die Klassen haben sowohl eine unit Eigenschaft (für Tag, Minute, etc) und eine precision Eigenschaft. Normalerweise sind diese funktional identisch. In einer oder zwei Klassen gehen sie auseinander. Ember.computed.alias ermöglicht precision Alias ​​zu unit für die meisten Fälle, aber nach Bedarf mit seinem eigenen Wert überschrieben werden.

Beachten Sie, dass create() den Alias-Setter verwendet, anstatt zu überschreiben.

Auch das Setzen eines Alias ​​mit einem Null-Objekt in seinem Pfad kann explodieren, während eine Bindung einfach nicht synchronisiert wird, wenn der Pfad nirgendwo hinführt.

Bitte sehen morgoth Kommentar unterhalb pro Soft-deprecation von * Binding Syntax

+0

Ist das der einzige Unterschied? –

+1

Nun, zusätzlich, mit einer Bindung, wenn der Pfad zum anderen Ende der Bindung gestört ist, haben Sie immer noch Ihre lokale Kopie der Variablen. Ein Alias ​​funktioniert nur, solange dieser Pfad intakt ist. –

+8

Bindung ist leise veraltet zugunsten von 'Ember.computed.alias' https://github.com/emberjs/ember.js/issues/1164#issuecomment-23200023 – morgoth

Verwandte Themen