2012-12-29 12 views
18

Kann mir jemand erklären, was der Zweck des Containermoduls in der neuesten Ember ist?Was ist der Zweck des Ember.Container

Ein Beispiel für seine Verwendung in der Einrichtung und in der Start dieses Tests:

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

Ich denke (und hoffe) seine öffentliches API bedeutet dies dokumentiert. Ich weiß, @Tchak hat daran gearbeitet, vielleicht könnte er hier eine Erklärung geben. –

Antwort

33

Das Ziel des Behälters ist eine Allzweck-Mechanismus zu schaffen, für die Beschreibung Modulabhängigkeiten als die Ad- Hoc-Ansatz, den wir benutzt hatten.

Zum Beispiel vorstellen, dass Sie den Regler für den post Weg finden mögen. Die Standard-Ember-Regeln lauten wie folgt: App.PostController. Vor dem Container würden wir diese Regeln nur dort fest codieren, wo wir die Suche durchführen mussten (unter Verwendung von classify und Freunden).

Der Behälter bietet eine Möglichkeit für uns, diese Regeln in einem einzigen Ort zu definieren. Als Bonus können die Regeln für Anwendungen überschrieben werden, die eine andere Konvention wünschen.

Also statt Ember.get(namespace, Ember.String.classify(name) + 'Controller') intern machen wir jetzt container.lookup('controller:' + name).

+3

Aber wie ich verstehe, wird dies nur für interne API verwendet, nicht eine öffentliche, oder? – ramigg

2
+2

Teile von Container sind etwas öffentlich und können (sollten) verwendet werden, um Abhängigkeiten zu registrieren/nachzuschlagen/einzufügen. Das Commit, das Sie verknüpft haben, spricht über #controllerFor. I.e. Sie sollten nicht auf den Container zugreifen, wenn es bereits öffentliche Mechanismen dafür gibt (Ember abstrahiert diese Abhängigkeitsinjektionen). [ "Public api für den Behälter ist noch im Fluss."] (Https://github.com/emberjs/ember.js/blob/master/packages/container/lib/main.js) – Michael

Verwandte Themen