2013-06-06 22 views
5

Mam obliczoną właściwość na modelu i aby obliczyć, że potrzebuję właściwości od kontrolera (nie tej, która kontroluje model). Wiem, że jest needs:, ale jest to tylko na
poziom kontrolera.
Jak mogę uzyskać właściwość w Ember z kontrolera innego niż ten, który zarządza modelem?Ember Uzyskiwanie właściwości z kontrolera w Modelu

Próbuję zrobić jakieś formatowanie, takie jak osoba, która [zadała to pytanie] [1], ale nie udało mi się tego, co zasugerowano tam.
Próbuję więc sformatować na modelu z wyliczoną właściwością, ale aby obliczyć tę właściwość, potrzebuję innej właściwości z kontrolera.

Każda pomoc jest bardzo doceniana! Dzięki!

Uwaga: używam EmberData do zarządzania modelem.

Edit:
W celu wyjaśnienia, co próbuję zrobić mam założyć przykład, który pokazuje problem
w ogólnym sposób: Przykładowa aplikacja pozwala numery wejściowe, przechowywać je ,
i pokaż je na liście. Możesz także wprowadzić "współczynnik konwersji", który nie zmienia samych danych modelu, ale prezentację na szablonie. Powiedzmy, że wprowadzisz numer 2, 2 zostanie zapisany w modelu, ale kiedy pojawi się na liście, zostanie "sformatowany" z wprowadzonym wcześniej współczynnikiem konwersji, a obliczona wartość pojawi się w szablonie. Problem polega na tym, że wartość, którą chcę sformatować, jest przechowywana na innym kontrolerze. Oto, co starałem dotąd:

  • nr 1 podejście:
    komputerowa nieruchomości na ArrayController - używając needs: w kontrolerze przemierzać i uzyskać wartość
    ->jsfiddle
    Problemy Napotkałem: Wygląda na to, że ArrayController pęka i szablon renderuje się tak, jakby w ogóle nie było zapisanych rekordów (uwaga: w przykładzie użyto pamięci lokalnej, więc utwórz kilka rekordów i odkomentuj obliczenia Właściwość d na ArrayController, a zobaczysz, że działa zgodnie z oczekiwaniami i pokazuje wprowadzone rekordy.

  • # 2 Podejście:
    komputerowa nieruchomości na samego modelu
    ->jsfiddle
    Problemy jakie napotkałem:
    nie mam pojęcia w jaki sposób mogę uzyskać właściwości z kontrolera podczas beeing wewnątrz modelu

  • # 3 podejścia:
    Kierownice Helper i needs: na kontrolerze
    1) Zdefiniuj obliczoną właściwość na kontrolerze (obsługującym model), aby uzyskać wartość z drugiego kontrolera. 2) utwórz pomocnika kierownicy i podaj wartość z modelu i wartość od kontrolera i zwróć obliczoną wartość
    -> jsfiddle (Możesz znaleźć link do trzeciego jsfiddle w komentarzach, ponieważ nie mam jeszcze wystarczającej liczby punktów reputacji).
    Problemy, które napotkałem:
    Zamiast wyświetlać sformatowany numer, otrzymuję "NaN" dla każdej wartości w renderowanym szablonie.

Jeśli ktoś ma pomysł, jak rozwiązać ten problem, lub może wskazać mi właściwy kierunek, będzie świetny. Twoja pomoc jest naprawdę doceniana! Dziękuję za Twój czas!

+0

możesz Skonfiguruj jsbin z jsfiddle z tym, co już próbował? to będzie o wiele łatwiejsze, aby pomóc – intuitivepixel

+0

Link do 3 # podejścia: [jsfiddle] (http://jsfiddle.net/Nairam/kYkdZ/) – Nairam

Odpowiedz

1

Mam to działa: użyłem podejścia nr 3 (opisanego w moim pytaniu).

  • używam właściwość komputerowej do pełnomocnika wartości z innego sterownika do sterownika, który jest związany z szablonem, gdzie chcę, aby wyświetlić sformatowaną wartość
  • stworzyłem pomocnik kierownica nazywa converted że będzie zrób formatowanie. Pomocnik kierownicy akceptuje dwa parametry: wartość, którą pośredniczę ze sterownika (który z kolei pochodzi od innego kontrolera) i wartość z modelu.

Rzeczą, która nie działała wcześniej, było to, że w szablonie podczas korzystania z helpera otrzymywałbym "NaN" na wszystkich elementach zamiast sformatowanych danych wyjściowych.
co rozwiązało problem było to, że zamiast obcinania przez model w szablonie z:

{{#each controller}} 
    <tr> 
     <td>{{converted amount conversionFactor}}</td> 
    </tr> 
    {{else}} 
    <tr> 
     <td>No amounts here yet</td> 
    </tr> 
    {{/each}} 

Zmieniłem go w ten sposób:

{{#each item in controller}} 
    <tr> 
     <td>{{converted item.amount conversionFactor}}</td> 
    </tr> 
    {{else}} 
    <tr> 
     <td>No amounts here yet</td> 
    </tr> 
    {{/each}} 

i działa doskonale!

Oto pracuje jsfiddle

10

Uzyskanie dostępu do dowolnego kontrolera z modelu jest naprawdę sprzeczne z architekturą Ember. Większość problemów związanych z formatowaniem najlepiej rozwiązać przy użyciu helpera Handlebars, ale jeśli naprawdę chcesz połączyć dane z kontrolera i modelu w bardzo poważny sposób, prawdopodobnie potrzebujesz obliczonej właściwości na kontrolerze.

Czy możesz podać konkretny przykład tego, co próbujesz zrobić? Dzięki temu o wiele łatwiej będzie zaproponować odpowiednie rozwiązanie.

+0

Dodałem więcej szczegółów do mojego pytania i dodałem kilka jsfiddles. – Nairam

Powiązane problemy