Podczas zabawy z emberem stwierdziłem, że czasami model jest przechowywany we właściwości kontrolera content
, czasami model jest również dostępny bezpośrednio na kontrolerze. Nie rozumiem jednak, kiedy tak się dzieje.Uzyskiwanie dostępu do modelu z szablonu
Pozwolę sobie wyjaśnić to na przykładzie, który znalazłem podczas montażu mojego MVC.
Konfiguracja A - początek
- I zdefiniowano niestandardowy
Member
obiekt, odpowiadającyMemberRoute
,MemberView
klas i szablon z nazwąmember
. - Przedmiotem
Member
miał pewne atrybuty, takie jakid
,nickname
itp - UWAGA: Nr kontroler formularza
MemberController
zostało zdefiniowane, co umownie Ember za to zapewnia regulator na własną rękę.
Konfiguracja B - Dostosowanie
- samo jak skonfigurować, ale teraz jest
MemberController
określono, że zawiera kilka metod działania, które są uruchamiane z poziomu szablonu.
Dziwne zachowanie (odp., Czego nie całkowicie zrozumieć)
- w konfiguracji A, mogę odnieść się do
Member
„s atrybutów bezpośrednio z{{id}}
lub{{nickname}}
. - w konfiguracji B, muszę używać
{{content.id}}
lub{{content.nickname}}
Jak udokumentowane w dokumentacji Ember, w MemberView
robi
setupController : function(controller, member) {
controller.set('content', member);
},
Więc może ktoś mi pomóc zrozumieć, dlaczego różnica i gdzie różnica jest? Obecnie moje przypuszczenie byłoby albo
- że kontekst szablonu jest inny (być może tam jest kawałek kodu brakuje w konfiguracji kontrolera?)
lub
- domyślny kontroler dostarczany przez ember automatycznie ma dodatkową magię, która nie jest bezpośrednio dostępna dla niestandardowych kontrolerów.
Każda pomoc w zrozumieniu tego jest bardzo cenna. Minęło już sporo czasu, zanim doszedłem tak daleko. Najpierw pomyślałem, że może to być modularyzacja wprowadzona przez konfigurację projektu z requireJS (cóż, nadal uważam, że może mieć wpływ). Ember jest w wersji 1.0pre4.
Z góry dziękuję! Patrick
doskonały, dzięki Michael. To nie jest tylko wyjaśnienie, ale co było nie tak w moim kodzie. Miałem 'App.MemberController = Ember.Controller.extend ({});'. Przynajmniej błąd pozwolił na lepsze zrozumienie kontrolerów. jeszcze raz! ph –