この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

コンポーネントの動的な作成

クライアント側の JavaScript コードで newComponentAsync() メソッドを使用してコンポーネントを動的に作成できます。

newComponentAsync() メソッドは、廃止された newComponent() メソッドおよび newComponentDeprecated() メソッドに置き換わるものです。

メモ

$A.componentService.newComponentAsync(callbackScope, callback, config, attributeValueProvider, localCreation, doForce, forceServer) は、新規作成されたコンポーネントを返す callback 必須関数と、コンポーネント記述子および属性を提供する config 必須オブジェクトを取得します。すべての引数についての詳細は、JavaScript API リファレンスを参照してください。

次のサンプルコードでは、ローカル ID を持つ新しい ui:button コンポーネントを作成して、イベントハンドラを新しいボタンに割り当て、そのボタンをボディに追加します。

1swfobject.registerObject("clippy.codeblock-0", "9");createButton : function(cmp) {
2    $A.componentService.newComponentAsync(
3        this,
4        function(newButton){
5            //Pass an event handler to the new button
6            newButton.addHandler('press', cmp, 'c.someHandler');
7            var body = cmp.get("v.body");
8            body.push(newButton);
9        },
10        {
11            "componentDef": "markup://ui:button",
12            "localId": "myLocalId",
13            "attributes": {
14                "values": { label: "Submit" }
15            }
16        }
17    );
18}
$A.componentService.newComponentAsync() は、$A.newCmpAsync() に相当します。

componentDef 属性は、作成するコンポーネントの定義を表します。この属性には、markup://namespace:name 形式のコンポーネントの定義記述子があります。これは、コンポーネント定義のメタデータへの参照です。

メモ

連動関係の宣言

このフレームワークでは、コンポーネントなどの定義間の連動関係が自動的に追跡されます。ただし、フレームワークで簡単に検出できない連動関係もあります。たとえば、コンポーネントのマークアップで直接参照されていないコンポーネントを動的に作成する場合などがこれに該当します。こうした動的な連動関係をフレームワークが把握できるようにするには、<aura:dependency> タグを使用します。これにより、必要に応じてコンポーネントとその連動関係がクライアントに送信されます。

使用方法についての詳細は、aura:dependency を参照してください。

サーバ側の連動関係

newComponentAsync() メソッドでは、クライアント側のコンポーネントの作成とサーバ側のコンポーネントの作成の両方がサポートされています。サーバ側の連動関係が見つからない場合、このメソッドは同期して実行されます。コンポーネントの作成にサーバ要求が必要かどうかは、最上位コンポーネントで判別されます。

最上位コンポーネントにサーバ側の連動関係はないが、ネストされた内部コンポーネントに連動関係があるコンポーネントの作成は、現在サポートされていません。

メモ

コントローラアクションがコールされるのはコンポーネントが作成された後のみであるため、コンポーネントの作成では、サーバ側のコントローラはサーバ側の連動関係にはなりません。

サーバ側の連動関係があるコンポーネントは、事前に読み込まれている場合でも、そのサーバで作成されます。サーバ側の連動関係がなく、連動関係の事前の読み込みまたは宣言によってその定義がすでにクライアントに存在している場合、サーバコールは実行されません。サーバ要求を強制するには、forceServer パラメータを true に設定します。