2013-03-06 31 views
17

W Ember, definiowanie właściwości jako wyliczonego aliasu do innej właściwości (lub innej właściwości obiektu) przy użyciu Ember.computed.alias('otherProperty') wydaje się mieć zasadniczo taki sam wynik, jak zdefiniowanie go jako powiązanie z tą właściwością przy użyciu propertyNameBinding: 'otherProperty'.Jaka jest różnica między Ember.computed.alias a Ember.binding?

Przyjrzałem się źródłu i dokumentacji, ale nie mogę znaleźć żadnego powodu, dla którego jeden byłby preferowany w stosunku do drugiego. Oczywiście szablony używają powiązań, co jest w porządku, ale dla właściwości w np. kontrolerów lub odniesienia do właściwości kontrolera w widoku, czy istnieje różnica?

Odpowiedz

14

Alias ​​można zastąpić przy rozszerzeniu(), całkowicie eliminując związek z drugim klawiszem.

Krótki przykład: Mam klasę funkcji i klas związanych z czasem, a klasy mają zarówno właściwość unit (dla dnia, minuty, itd.), Jak i właściwość precision. Zwykle są one funkcjonalnie identyczne. W jednej lub dwóch klasach się rozchodzą. W większości przypadków Ember.computed.alias zezwala nana alias do unit, ale w razie potrzeby należy go zastąpić własną wartością.

Należy zauważyć, że create() użyje ustawiania aliasów zamiast przesłonić.

Ustawienie aliasu z pustym obiektem na ścieżce może spowodować wysadzenie w powietrze, a wiązanie po prostu nie zostanie zsynchronizowane, jeśli ścieżka nigdzie nie prowadzi.

proszę zobaczyć komentarz Morgotha ​​poniżej za soft-Wycofanie * Binding składni

+0

To jedyna różnica? –

+1

Dodatkowo, z wiązaniem, jeśli ścieżka do drugiego końca wiązania jest zakłócona, nadal masz lokalną kopię zmiennej. Alias ​​działa tylko tak długo, jak długo trwa ta ścieżka. –

+8

Wiązanie jest delikatnie przestarzałe na rzecz 'Ember.computed.alias' https://github.com/emberjs/ember.js/issues/1164#issuecomment-23200023 – morgoth

Powiązane problemy