JavaScript での表示ラベルの取得
静的表示ラベル
静的表示ラベルは、"$Label.c.task_mode_today" のように、1 つの文字列で定義します。フレームワークは静的表示ラベルをマークアップか JavaScript コードで解析し、コンポーネントの読み込み時にクライアントに表示ラベルを送信します。表示ラベルを解決するためのサーバとの往復は必要ありません。
静的表示ラベルを JavaScript コードで取得するには、$A.get() を使用します。次に例を示します。
1var staticLabel = $A.get("$Label.c.task_mode_today");
2component.set("v.mylabel", staticLabel);Apex コードを使用して表示ラベルの値を取得し、JavaScript コードを使用してその値をコンポーネントに送信することもできます。詳細は、「Apex での表示ラベルの取得」を参照してください。
動的表示ラベル
$A.get(labelReference) では、表示ラベルの値をコンポーネント定義と共にクライアントに送信できるように、コンパイル時に表示ラベルの参照が解決できなければなりません。
実行時まで表示ラベルの解決を延期する必要がある場合は、JavaScript コードで表示ラベルを動的に作成できます。この手法は、表示ラベルを使用する必要があるけれども、その特定の表示ラベルがどれなのか実行時まで不明である場合に便利です。
1// Assume the day variable is dynamically generated
2// earlier in the code
3// THIS CODE WON’T WORK
4var dynamicLabel = $A.get("$Label.c." + day);クライアントが表示ラベルをすでに把握している場合は、$A.get() によって表示ラベルが表示されます。この値が把握されていない場合、本���モードでは空の文字列が表示され、デバッグモードでは表示ラベルキーを示すプレースホルダ値が表示されます。
実行時に特定できない表示ラベルで $A.get() を使用すると、dynamicLabel は空の文字列になり、取得された値には更新されません。表示ラベル "$Label.c." + day は動的に作成されるため、コンポーネントが要求されるとき、フレームワークは表示ラベルを解析したりクライアントに送信したりできません。
別のアプローチによって $A.get() を使用し、動的に生成される表示ラベルを操作できます。
動的に生成された既知の表示ラベルをコンポーネントで使用する場合は、JavaScript リソースで表示ラベルの参照を追加して、表示ラベルのサーバの往復を避けることができます。コンポーネントが要求されると、フレームワークはこれらの表示ラベルをクライアントに送信します。たとえば、$Label.c.task_mode_today と $Label.c.task_mode_tomorrow の表示ラベルキーがコンポーネントによって動的に生成される場合は、クライアント側コントローラまたはヘルパーなど、JavaScript リソースのコメントで表示ラベルの参照を追加します。
1// hints to ensure labels are preloaded
2// $Label.c.task_mode_today
3// $Label.c.task_mode_tomorrowコードによって多くの表示ラベルが生成される場合、このアプローチでは適切にスケールされません。
潜在的な表示ラベルのコメントヒントのすべては追加しない場合、$A.getReference() を使用することもできます。このアプローチでは、サーバとの往復というコストをかけて表示ラベルの値を取得することになります。
次の例では、$A.getReference() をコールして表示ラベルの値を動的に作成し、取得した表示ラベルで tempLabelAttr コンポーネント属性を更新しています。
1var labelSubStr = "task_mode_today";
2var labelReference = $A.getReference("$Label.c." + labelSubStr);
3cmp.set("v.tempLabelAttr", labelReference);
4var dynamicLabel = cmp.get("v.tempLabelAttr");$A.getReference() は表示ラベルの参照を返します。これは文字列ではないため、文字列のように扱わないでください。文字列の表示ラベルを $A.getReference() から直接取得することはありません。
その代わりに、返された参照を使用して、コンポーネントの属性値を設定します。このコードでは、cmp.set("v.tempLabelAttr", labelReference); でこれを行っています。
表示ラベルの値がサーバから非同期に返されるとき、属性値は参照であるために自動的に更新されます。コンポーネントは再表示されて、表示ラベルの値が表示されます。