2016-05-04 4 views
1

このページでは、https://github.com/emberjs/ember.js/issues/11043という素晴らしい例を見て、コンポーネントから継承する方法を説明します。ここでは一例です:http://emberjs.jsbin.com/rwjblue/443/edit?html,css,js,outputEmberJSコンポーネントのコンテキストを設定する方法は?

私は少しを果たし、特にアクションを持つと、この質問に来る:

私はコンポーネントのコンテキストを設定できますか?

は、次の例を検討:

http://emberjs.jsbin.com/cofobanoca/edit?html,css,js,output

と彼らはほとんど同じ第2のリンクのものを除いてあり、それの派生

http://emberjs.jsbin.com/gipawemipe/1/edit?html,css,js,output

を、コンポーネントを動的に作成されます行動の中で

私の質問は、第2の例の{{this}}が「App.XBarComponent」ではなく「生成されたアプリケーションコントローラ」である理由です。

編集: 多分私は明確ではありませんでした。

私が達成したいのは、入力フィールドを含むモーダルをレンダリングすることです。これはアプリケーションテンプレート内で(アウトレットを使用して)ページ全体のポップアップとしてレンダリングする必要があります。 Modalは、fooとbarのような2つのコンポーネントで構築されています。 BaseModal(Foo)とLoginModalContent(Bar)はより良い名前です。

OK(これはBaseModalで定義されています)をクリックすると、LoginModalContentのOKアクションを呼び出して、(LoginModalContentで定義されている)フォームの値を取得することができます。 this.get( 'username')。

+0

"コンテキスト"とはどういう意味ですか? –

+0

テンプレート内の '{{this}}'を意味します。 – Charles

+0

'this'はテンプレートを駆動するオブジェクトです。ルートに関連付けられた最上位テンプレートの場合、たとえば、コントローラになります。コンポーネントに関連付けられたテンプレートの場合は、それがコンポーネントになります。あなたはそれを自分で設定しません。 –

答えて

0

第2のリンクでは、 コンポーネントがアクション内で動的に作成されることを除いて、ほとんど同じです。そこ

あなただけビューをレンダリング、コンポーネントを作成していない、とあなたはエンバーがあなたのためにそれを作成したビューのコントローラを指定しない場合{{this}}は、「アプリケーションコントローラを生成」されている理由、それはです2番目の例。

また、ビューにコンポーネントコントローラがないため、XBarComponentのアクションハンドラが2番目の例で機能しない理由についても説明します。

component helperをプログラマチックに挿入したい場合は、Emberがビュー/コントローラ/サブコンポーネントの管理を処理する間にコンポーネントをその名前でレンダリングします。

+0

テンプレートからではなく、JavaScriptから挿入することはできますか?私は、コントローラから(アウトレットを使用して)アプリケーションテンプレートでダイアログをレンダリングしたいと思います。 – Charles

関連する問題