2012-12-29 29 views
18

Czy ktoś może wyjaśnić, jaki jest cel modułu Container w najnowszym Ember?Jaki jest cel Ember.Container

Przykładem jego użytkowania, w konfiguracji iw początku tego testu:

module("Ember.View - handlebars integration", { 
    setup: function() { 
    Ember.lookup = lookup = { Ember: Ember }; 
    lookup.TemplateTests = TemplateTests = Ember.Namespace.create(); 

    container = new Ember.Container(); 
    container.optionsForType('template', { instantiate: false }); 
    } 

test("template view should call the function of the associated template", function() { 
    container.register('template', 'testTemplate', Ember.Handlebars.compile("<h1 id='twas-called'>template was called</h1>")); 
+0

myślę (i mam nadzieję) zostanie to udokumentowane. Wiem, że @tchak nad tym pracował, być może mógłby podać wyjaśnienie. –

Odpowiedz

33

Celem pojemnika jest zapewnienie mechanizmu bardziej ogólnego przeznaczenia do opisywania zależności modułów niż ad- podejście hoc, z którego korzystaliśmy.

Na przykład wyobraź sobie, że chcesz znaleźć kontroler dla trasy post. Domyślne reguły Ember polegają na tym, że sprawdzimy je jako App.PostController. Przed kontenerem po prostu zakodowalibyśmy te reguły tam, gdzie potrzebowalibyśmy wyszukiwania (używając classify i znajomych).

Kontener umożliwia nam zdefiniowanie tych reguł w jednym miejscu. Jako bonus, reguły mogą być przesłonięte dla aplikacji, które chcą innej konwencji.

Więc zamiast Ember.get(namespace, Ember.String.classify(name) + 'Controller') wewnętrznie wykonujemy teraz container.lookup('controller:' + name).

+3

Ale jak rozumiem, jest to używane tylko dla wewnętrznego API, a nie publicznego, prawda? – ramigg

2

Przeznaczone do użytku wewnętrznego.

Nie miało być publicznych API

https://github.com/emberjs/ember.js/commit/5becdc4467573f80a5c5dbb51d97c6b9239714a8

+2

Części kontenera są nieco publiczne i mogą (powinny) służyć do rejestrowania/wyszukiwania/wstrzykiwania zależności. Dołączony commit mówi o #controllerFor. To znaczy. nie powinieneś mieć dostępu do kontenera, gdy istnieją już publiczne mechanizmy, aby to zrobić (Ember usuwa te zastrzyki zależności). ["Publiczne API do kontenera ciągle się zmienia."] (Https://github.com/emberjs/ember.js/blob/master/packages/container/lib/main.js) – Michael