tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:Lightningアプリ開発『Local IDs』と『Global IDs』

f:id:tyoshikawa1106:20141031140734p:plain
Lightning Componentsには『Local IDs』と『Global IDs』の二種類のIDが宣言できるようになっています。


Local IDsの宣言はこんな感じです。『aura:id=』というように宣言します。

<ui:button aura:id="button1" label="button1"/>


Global IDsの宣言はこんな感じです。『id=』というように宣言します。

<div id="{!globalId + '_footer'}"></div>


次のように宣言して確認してみました。

f:id:tyoshikawa1106:20141031134324p:plain

<ui:InputText aura:Id="expname" class="form-control" value="{!v.newExpense.name}" placeholder="Local IDs" required="true" />
<input type="text" id="{!globalId + '_input'}" class="form-control" placeholder="Global IDs" />


HTMLに変換された結果はこのようになります。

f:id:tyoshikawa1106:20141031134438p:plain


divタグは指定したIDのままでしたが、TextBoxのIDはLocalもGlobalも自動生成された値が設定されていました。Visualforceのときのようにdocument.getElementByIdでIDを指定するという使い方はしないみたいです。


Global IDの方ですが『9:2.a_input』となっていました。『id="{!globalId + '_input'}"』と宣言していたので『'_input'』と文字列で指定したものはそのまま設定されglobalIdと変数で指定したものは『9:2.a』というように設定されました。おそらく各コンポーネント毎に自動生成された値だと思います。


追加で確認してみました。やはりglobalIdの部分は共通で設定されるみたいです。

f:id:tyoshikawa1106:20141031135140p:plain:w300

f:id:tyoshikawa1106:20141031135240p:plain


ちなみに『aura:component』タグや『ui:InputText』タグのようにLightning用のタグはGlobal IDsを設定できないみたいです。

f:id:tyoshikawa1106:20141031140050p:plain


最後に処理内での呼び出し方は次のようになるみたいです。

Local IDs
cmp.find("button1"),
Global IDs
var globalId = cmp.getGlobalId();
var comp = $A.getCmp(globalId);


まだ理解できていないことが多いですがLightningのIDはこのような感じになっていました。『Local IDs』と『Global IDs』についてはLightning Components Developers Guideに記載されています。