2012-12-29 30 views
18

コンテナモジュールの目的が最新のEmberに何であるか説明できる人はいますか?Ember.Containerの目的は何ですか

その使用の例は、セットアップ中にこの試験の開始において:

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

パブリックAPIを意味するものではない

これは文書化されます。 @tchakがこれに取り組んできたことは分かっていますが、おそらく彼はここで説明することができます。 –

答えて

33

容器の目的はAD-より、モジュールの依存関係を記述するためのより汎用的な機構を提供することです私たちが使っていた

たとえば、postルートのコントローラを検索するとします。デフォルトのEmberルールは、App.PostControllerと見なします。コンテナの前では、参照を行う必要があるときはいつでも、それらのルールをハードコードするだけです(classifyと友人を使用)。

コンテナは、これらのルールを1か所で定義する方法を提供します。ボーナスとして、違う慣習が必要なアプリケーションの場合は、ルールを無効にすることができます。

Ember.get(namespace, Ember.String.classify(name) + 'Controller')の代わりに、container.lookup('controller:' + name)となります。

+3

しかし、これは内部のAPIでのみ使用されていることを理解しています。 – ramigg

2

内部使用を想定しています。私が思う(と願っています)

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

+2

コンテナの一部は多少公開されており、依存関係を登録/参照/注入するために使用することができます。リンクしたコミットは#controllerForについて話します。私。既に公開メカニズムがある場合はコンテナにアクセスしないでください(Emberはこれらの依存性注入を抽象化します)。 [「コンテナのパブリックAPIは依然として流通しています。」](https://github.com/emberjs/ember.js/blob/master/packages/container/lib/main.js) – Michael

関連する問題