プライマリ・コンテンツに移動
Oracle Enterprise Pack for Eclipse Oracle Mobile Application Framework (OEPE Edition)でのモバイル・アプリケーションの開発
リリース2.2.1
E72511-01
  目次へ移動
目次

前
 
次
 

19 カスタムMAF AMX UIコンポーネントの作成

この章では、カスタムMAF AMX UIコンポーネントの作成方法および開発環境の一環としてそれらを指定する方法について説明します。

この章には次の項が含まれます:

19.1 カスタムUIコンポーネントの作成の概要

JavaScriptおよびMAFで提供されるAPIの組合せを使用して、新しい完全に機能するインタラクティブUIコンポーネントを作成でき、MAF AMXアプリケーション機能で使用されるタグ・ライブラリにそれらを追加できます。

19.2 MAF APIを使用したカスタム・コンポーネントの作成

MAFには、カスタム・コンポーネントを作成するための次のAPIが用意されています。

19.2.1 静的APIの使用方法

表19-1に、カスタムUIコンポーネントの作成に使用できる静的APIを示します。

表19-1 静的API

戻り型 関数名 パラメータ 説明

Function

adf.mf.api.amx.TypeHandler.register

String namespaceUrl,

String tagName,

adf.mf.api.amx.TypeHandler precreatedClass

TypeHandler クラスをタグ・ネームスペースおよび名前で登録します。

プロトタイプの関数を追加できるように、登録されたadf.mf.api.amx.TypeHandlerサブクラスを返します。

precreatedClassはオプションですが、adf.mf.api.amx.TypeHandlerを継承するクラスを最初に作成した場合は使用できます。

void

adf.mf.api.amx.addBubbleEventListener

Node domNode,

String eventType,

Function listener,

Object eventData

バブル・イベント・リスナーを登録します(tap、taphold、keydown、touchstart、touchmove、touchend、focus、blur、resizeなど)。

WebブラウザはすべてのDOMノード上ですべてのイベント・タイプをサポートしないことに注意してください(詳細は、ブラウザのドキュメントを参照してください)。

eventDataはオプションで、そのリスナー機能で使用可能にするための追加データとして機能します。

void

adf.mf.api.amx.removeBubbleEventListener

Node domNode,

String eventType,

Function listener

adf.mf.api.amx.addBubbleEventListenerを介して追加されたバブル・イベント・リスナーを登録解除します。

メタ・イベントのtapおよびtapholdを削除すると、削除される指定されたリスナーからのみではなく、すべてのtouchstartリスナーおよびtouchendリスナー(その他のメタ・イベントのものを含む)が要素から削除されることになります。

void

adf.mf.api.amx.addDragListener

Node domNode,

Object payload,

Object eventData

要素に対して、MAF AMXドラッグ・イベントのトリガーを許可します。

Object payloadは、startdragendの3つのメンバー関数を定義します。各関数の最初のパラメータはDOMイベントで、2番目のパラメータは、次のメンバーを伴うdragExtra Objectです。

  • eventSource: DOMイベント・ソース。

  • pageX: イベントのx座標。

  • pageY: イベントのy座標。

  • startPageX: 元のpageX

  • startPageY: 元のpageY

  • deltaPageX: pageXでの変更。

  • deltaPageY: pageYでの変更。

  • originalAngle: 定義されている場合、これはドラッグする際の基準となる角度(度単位)で、0度は東、90が北、-90が南、180が西です。

変更可能なメンバー・フラグは次のとおりです。

  • preventDefault

  • stopPropagation

eventDataはオプションで、そのリスナー機能で使用可能にするための追加データとして機能します。

void

adf.mf.api.amx.removeDomNode

Node domNode

DOMノードおよびその子を削除しますが、その前にadf.mf.api.amx.addBubbleEventListenerを介して追加したイベント・リスナーを削除します。

void

adf.mf.api.amx.emptyHtmlElement

Node domNode

子DOMノードを削除し、それぞれの子ノード上でadf.mf.api.amx.removeDomNodeをコールすることによってHTML要素を空にします。

void

adf.mf.api.amx.processAmxEvent

adf.mf.api.amx.AmxNode amxNode,

String amxEventType,

String attributeValueName,

String newValue,

AmxEvent amxEvent,

Function finishedCallback

AmxEventを処理します。

attributeValueNameが定義されている場合は値を変更し、適切なsetPropertyListenerサブタグおよびactionListenerサブタグを処理した後に[amxEventType]Listener属性を処理します。完了コールバックが指定されている場合は、イベントが処理されると起動されます。

void

adf.mf.api.amx.acceptEvent

なし

その関数に渡す必要のある可能性があるものを準備しないように、adf.mf.api.amx.processAmxEventの起動を開始しても安全かどうかを判断します(たとえば、ページ遷移の途中やデザインタイム・プレビューなどの環境にある場合)。

void

adf.mf.api.amx.invokeEl

String expression,

Array<String> params,

String returnType,

Array<String> paramTypes,

Function successCallback,

Function failureCallback

ELメソッドの起動用のadf.mf.el.invoke()と同様のユーティリティを表しますが、デザインタイム・プレビューなどの環境では実行されない点が異なります。

void

adf.mf.api.amx.enableAmxEvent

adf.mf.api.amx.AmxNode amxNode,

Node domNode,

String eventType

DOMノードに対して、amx:showPopupBehavioramx:setPropertyListenerなどのtapHoldswipeなどのカスタムMAF AMXイベントのトリガーを許可します。

void

adf.mf.api.amx.doNavigation

String outcome

指定された結果に対してナビゲーションを実行する予定であることをコントローラに伝えます。

void

adf.mf.api.amx.validate

Node domNode,

Function successCallback

不十分なバリデータ(必須またはamx:validationBehavior)がある場合に、ナビゲーションなどの操作を回避します。

続行が許可された場合は、successCallbackが起動されます。

void

adf.mf.api.amx.showLoadingIndicator

Number failSafeDuration,

Function failSafeClientHandler

ビジー・インジケータを表示します。

パラメータは次のとおりです。

  • failSafeDuration: ローディング・インジケータの表示および非表示の間にMAFが待機するおよその期間(ミリ秒を表す負でない整数) (他のトリガーがすでにインジケータを表示していないと仮定した場合)。このパラメータが指定されない場合、またはnullに設定された場合、MAFは10000 (10秒)を使用します。

  • failSafeClientHandler: failSafeDurationに達した場合に起動されるオプションのJavaScript関数。この関数は続行方法の決定に使用できます。この関数は、次のいずれかの値によって定義されたStringを返す必要があります。

    - hide: デフォルトのフェイルセーフのようにインジケータを非表示にします。

    - repeat: 関数を再び起動できるように別の期間についてのタイマーを再起動します。

    - freeze: インジケータを起動させたまま無限に待機させるため、ページは再起動されるまでフリーズ状態で停止します。

必要以上に長くインジケータを表示しないためには、非表示にします。

void

adf.mf.api.amx.hideLoadingIndicator

なし

ローディング・インジケータの1つのインスタンスを非表示にします。

Object

adf.mf.api.amx.createIterator

Object dataItems

オブジェクトのJavaScript配列またはツリー・ノード・イテレータ(コレクション・モデル)を反復するイテレータのいずれかをサポートするイテレータを作成します。

nexthasNextおよびisTreeNodeIteratorの関数でイテレータのObjectを返しますが、ここで、これ以上のオブジェクトが使用可能でない場合にnextは未定義を返します。

void

adf.mf.api.amx.bulkLoadProviders

Object treeNodeIterator,

Number startingPoint,

Number maximumNumberOfRowsToLoad,

Function successCallback,

Function failCallback

キャッシュされ、ローカルでアクセスできるようにデータ・プロバイダのセットをバルクロードします。

String

adf.mf.api.amx.buildRelativePath

String url

現在のMAF AMXページを基準にしているものと想定して、指定されたリソースを基に相対パスを構築します。リソースにプロトコルがある場合、これは絶対パスであると考えられるため変更されません。

void

adf.mf.api.amx.markNodeForUpdate

adf.mf.api.amx.AmxNodeUpdateArguments args

ノードおよびその下でAmxNode階層の更新が必要なAmxNodeに対する状態変更をMAFに通知するTypeHandlerインスタンスの関数。

カスタムcreateChildrenNodesメソッドがTypeHandlerに存在する場合、この関数はこれらのAmxNodeインスタンスに対して再度コールされます。これにより、子をスタンプするAmxNodeインスタンスに対して、ユーザー変更に起因する新しいスタンプの追加が許可されます。AmxNodeのレンダリングの準備ができると、refreshメソッドはAmxNode上で指定されたプロパティを使用してコールされます。AmxNodeでレンダリングの準備が完了していない場合は、MAFはすべてのELが解決されるまで待機し、すべてのデータが使用可能になるとrefreshメソッドがコールされます。



注意:

その他のパブリックAPIはadf.mf.elパッケージにあり、ロギング、変換およびデータ・チャネルに使用できます。

19.2.2 AmxEventクラスの使用方法

表19-2に、カスタムUIコンポーネントの作成時に使用できるAMXEventクラスをリストします。

表19-2 AMXEventクラス

クラス名 パラメータ 説明

adf.mf.api.amx.ActionEvent

なし

結果ベースのナビゲーションをトリガーするイベント。

Oracle Mobile Application Framework Java APIリファレンスoracle.adfmf.amx.event.ActionEventも参照してください。

adf.mf.api.amx.MoveEvent

Object rowKeyMoved,

Object rowKeyInsertedBefore

指定された行が移動されたことを通知するイベント。移動された行のキーが、これが挿入される前の行のキーとともに含まれています。

Oracle Mobile Application Framework Java APIリファレンスのoracle.adfmf.amx.event.MoveEventも参照してください。

adf.mf.api.amx.SelectionEvent

Object oldRowKey,

Array<Object> selectedRowKeys

コンポーネントの選択の変更についてのイベント。

Oracle Mobile Application Framework Java APIリファレンスのoracle.adfmf.amx.event.SelectionEventも参照してください。

adf.mf.api.amx.ValueChangeEvent

Object oldValue,

Object newValue

コンポーネントの値の変更についてのイベント。

Oracle Mobile Application Framework Java APIリファレンスのoracle.adfmf.amx.event.ValueChangeEventも参照してください。


19.2.3 TypeHandlerの使用方法

表19-3に、カスタムUIコンポーネントの作成に使用できるTypeHandlerのAPIをリストします。

表19-3 TypeHandler API

戻り型 関数名 パラメータ 説明

HTMLElement

render

adf.mf.api.amx.AmxNode amxNode,

String id

初期DOM構造を作成し、その構造のルート要素を返します。

このメンバー関数は必須であり、定義する必要があります。

void

init

HTMLElement rootElement,

adf.mf.api.amx.AmxNode amxNode

このコンポーネントを使用して作成されたコンポーネントのセットに属するすべてのcreate関数が起動された後に起動されるハンドラを表します。

void

postDisplay

HTMLElement rootElement,

adf.mf.api.amx.AmxNode amxNode

このコンポーネントを使用して作成されたコンポーネントのセットに属するすべてのinit関数が起動された後に起動されるハンドラを表します。

Boolean

createChildrenNodes

adf.mf.api.amx.AmxNode amxNode

処理のためにAmxNodeの子を選択的に追加します。子のうちの1つが表示されている場合、この関数を使用すると他の子が処理されないことに注意してください。

カスタム実装ではなくMAFが子ノードを作成する予定の場合は、falseを返す必要があります。

この関数はオプションです。

adf.mf.api.amx.AmxNodeChangeResult

updateChildren

adf.mf.api.amx.AmxNode amxNode,

adf.mf.api.amx.AmxAttributeChange attributeChanges

次のいずれかに対するハンドラを表します。

  • 任意の古い子を削除し、任意の新しい子を作成し、AmxNodeに追加します。

  • 戻り値を介して、adf.mf.api.amx.AmxNodeChangeResultアクションを実行する必要のある対象を宣言します。

この関数はオプションです。

adf.mf.api.amx.AmxNodeChangeResult

getDescendentChangeAction

adf.mf.api.amx.AmxNode amxNode,

adf.mf.api.amx.AmxDescendentChanges descendentChanges

タイプ・ハンドラに対して、子孫AmxNodeインスタンスの変更の処理のカスタマイズを許可します。

void

refresh

adf.mf.api.amx.AmxAttributeChange attributeChanges,

adf.mf.api.amx.AmxDescendentChanges descendentChanges

タイプ・ハンドラに対して、変更に反応してHTMLを選択的にリフレッシュすることを許可します。このメソッドは、updateChildrenメソッドの後にコールされます。

attributeChangesは、変更された属性を定義します。descendentChangesnullでない場合、リフレッシュが必要なすべての子孫ノードに対する変更を定義します。

Boolean

isFlattenable

なし

AmxNodeがフラット化可能かどうかを宣言します。フラット化されたAmxNodeには、レンダリングに関連する動作がない可能性があるため、フラット化されたAmxNodeのタイプ・ハンドラのみが子ノードを作成および訪問できますが、レンダリングに影響を与えることはできません。

Boolean

visit

adf.mf.api.amx.VisitContext visitContext,

Function visitCallback

このAmxNodeから開始されるAmxNodeツリー訪問を処理します。

訪問でパラメータvisitContextおよびAmxNodeが使用される場合に起動されるvisitCallback関数。訪問が完了し、継続すべきでないかどうかを返します。

Boolean

visitChildren

adf.mf.api.amx.AmxNode amxNode,

adf.mf.api.amx.VisitContext visitContext,

Function visitCallback

このAmxNodeの子から開始されるAmxNodeツリー訪問を処理します。

訪問でパラメータvisitContextおよびAmxNodeが使用される場合に起動されるvisitCallback関数。訪問が完了し、継続すべきでないかどうかを返します。

void

preDestroy

HTMLElement rootElement,

adf.mf.api.amx.AmxNode amxNode

新しいビューにナビゲートしようとするときなどに、現在のビューが削除される直前のすべてを処理します。通常、スクロール位置などのクライアント状態を保存するために使用されます(adf.mf.api.amx.setClientStateを参照)。

void

destroy

HTMLElement rootElement,

adf.mf.api.amx.AmxNode amxNode

新しいビューが表示された後および古いビューが削除された後のすべてを処理します。


19.2.4 AmxNodeの使用方法

表19-4に、カスタムUIコンポーネントの作成に使用できるAmxNodeのAPIをリストします。

表19-4 AmxNode API

String 関数名 パラメータ 説明

String

getId

なし

このAmxNodeの一意の識別子を取得します。この値は、ルートDOM要素上のIDを構成します。

adf.mf.api.amx.AmxTag

getTag

なし

このAmxNodeを作成したAmxTagを取得します。

adf.mf.api.amx.TypeHandler

getTypeHandler

なし

このAmxNodeに関連付けられたTypeHandlerオブジェクトを取得します。

void

setClientState

Object payloadJsonObject

指定されたAmxNode IDのクライアント状態を格納および置換します。

状態変更が発生した場合に、タイプ・ハンドラはこの関数をコールする必要があります(たとえば、ユーザーが新しいページに移動した後に戻るときにリストアされるスクロール位置のようなキャッシュする必要のあるもの)。しかし、状態変更が発生したことを検出することは必ずしも可能であるとはいえないため、ビューが廃棄される直前にコンポーネントの状態を更新する必要がある場合があります。検討する必要のある2つのシナリオは次のとおりです。

  1. refresh: DOM構造の断片を再描画する場合(同一ビュー内)。

  2. preDestroy: 新しいビューに移動し、後で戻る場合。

payloadJsonObjectは、このビュー・インスタンスの存続期間中に格納されるクライアント状態データです。

Object

getClientState

なし

このビュー・インスタンス中にsetClientState関数を介して以前に格納されたpayloadJsonObjectを取得します(使用できない場合は未定義)。

void

setVolatileState

Object payloadJsonObject

指定されたAmxNode IDのクライアント状態を格納および置換します。揮発状態変更が発生した場合に、タイプ・ハンドラはこの関数をコールする必要があります(たとえば、新しいMAF AMXページに移動する際に無視する必要があるが、コンポーネントの再描画に備えて保持する必要のあるもの)。

payloadJsonObjectは、ナビゲーションが発生するまで格納する揮発状態データです。

Object

getVolatileState

なし

最後のナビゲーション以降にsetVolatileState関数を介して以前に格納されたpayloadJsonObjectを取得します(使用できない場合は未定義)。

Object

getConverter

なし

可能な場合、このAmxNodeのコンバータを取得します。

void

setConverter

Object converter

このAmxNodeのコンバータを設定します。

String

storeModifyableEl

String nameOfTheAttribute

属性に対しては、EL式を作成および格納し、この式はEL値をモデルに設定するために使用される可能性があります。

この値はコンテキストを区別しないため、値の設定に常に使用できます。ユーザーの操作に基づいて値の設定に使用することが一般的です。

この関数は、タイプ・ハンドラによってコールされる場合があります。

サブジェクト属性がEL値にバインドされていない場合はnullを返します。

Object

getStampKey

なし

AmxNodeのスタンプ・キーを取得します。スタンプ・キーは、反復コンテナ内で作成されたAmxNodeインスタンスを特定します。

これは親AmxNodeによって提供されます。スタンプ・キーを使用するタグの例として、amx:iteratorタグがあります。

AmxNodeがスタンプされていない場合は、nullが返されます。

Array<String>

getDefinedAttributeNames

なし

このノードに対して定義されている属性名のリストを取得します。

Object

getAttribute

String name

指定された名前の属性の属性値を取得します。

戻り値がnullの場合があります。

属性が設定されていないかまだロードされていない場合は、未定義が返されます。

void

setAttributeResolvedValue

String name,

Object value

AmxNode上の属性の属性値を格納するためにタイプ・ハンドラまたはMAFによって使用されます。

この関数はモデルを更新しません。

void

setAttribute

String name,

String value

属性の値をモデルに設定します。

この値は、EL値を更新するためにJava側に送信されます。AmxNode上の値はこのコールによって更新されません。かわりに、データ変更イベントでAmxNodeが更新される必要があります。

Boolean

isAttributeDefined

String name

属性がユーザーによって定義されているかどうかをチェックします。

adf.mf.api.amx.AmxNode

getParent

なし

AmxNodeまたは最上位の場合はnullを取得します。

void

addChild

adf.mf.api.amx.AmxNode child,

String facetName

AmxNodeをこのAmxNodeに追加します。

子がファセットに属していない場合は、facetNamenullにする必要があります。

Boolean

removeChild

adf.mf.api.amx.AmxNode child

このAmxNodeから子AmxNodeを削除します。

子は階層からは削除されますが、そのDOMは削除されません。DOMの削除はコール元が対応する必要があります。

これにより、DOMが置き換えられたときにタイプ・ハンドラによるアニメーションおよびその他の遷移の処理が可能になります。

子が見つかり、削除されたかどうかが返されます。

Boolean

replaceChild

adf.mf.api.amx.AmxNode oldChild,

adf.mf.api.amx.AmxNode newChild

既存の子を別の子で置き換えます。

古い子が見つかり、置き換えられたかどうかが返されます。

Array<adf.mf.api.amx.AmxNode>

getChildren

String facetName,

Object stampKey

AmxNodeを取得します。

2つのパラメータはオプションです。非ファセットの子を取得するにはfacetNamenullを指定できます。

子が存在しないか、指定された修飾子の子が存在しない場合は、空の配列が返されます。

Map<String, Array<adf.mf.api.amx.AmxNode>>

getFacets

Object stampKey

AmxNodeのすべてのファセットを取得します。

stampKeyはオプションですが、指定した場合、指定されたスタンプ・キーのAmxNodeインスタンスを取得します。

Boolean

visit

adf.mf.api.amx.VisitContext visitContext,

Function visitCallback

このAmxNodeからツリー訪問を実行します。

visitCallbackは、visitContextおよびAmxNodeを引数として受け入れる必要があります。

訪問が完了し、継続すべきでないかどうかを返します。

Boolean

visitChildren

adf.mf.api.amx.VisitContext visitContext,

Function visitCallback

このAmxNodeの子からツリー訪問を実行します。

visitCallbackは、visitContextおよびAmxNodeを引数として受け入れる必要があります。

訪問が完了し、継続すべきでないかどうかを返します。

Boolean

visitStampedChildren

Object stampKey,

Array<String> facetNamesToInclude,

Function filterCallback,

adf.mf.api.amx.VisitContext visitContext,

Function visitCallback

カスタムvisitChildren関数内から子AmxNodeを訪問するために子をスタンプするタイプ・ハンドラにとって便利な関数。

facetNamesToIncludeが空の場合、このスタンプで処理されるファセットはありません。facetNamesToIncludenullの場合は、このスタンプに対してすべてのファセットが処理されます。

filterCallbacknullにできます。filterCallbackは、Booleantrue(子の作成にタグが使用される)またはfalse(タグは処理されない)を返す必要があります。

visitCallback関数は、visitContextおよびAmxNodeを引数として受け入れる必要があります。

訪問が完了し、継続すべきでないかどうかを返します。

Array<adf.mf.api.amx.AmxNode>

getRenderedChildren

String facetName,

Object stampKey

AmxNodeのレンダリングされた子を取得します。

facetNameは、レンダリングされた子の取得元のファセットを、非ファセットの子の場合はnullを示します。

stampKeyを指定した場合、指定されたスタンプ・キーの子AmxNodeインスタンスを取得します。

指定されたスタンプ・キーに対してレンダリングされる子を返します。フラット化できる(フラット化可能)すべてのコンポーネントをフラット化し、レンダリングされないコンポーネントは返しません。

Boolean

isFlattenable

なし

AmxNodeがフラット化可能かどうかを特定します。

フラット化されたAmxNodeには、レンダリングに関連する動作がない可能性があるため、フラット化されたAmxNodeのタイプ・ハンドラのみが子ノードを作成および訪問できますが、レンダリングに影響を与えることはできません。

adf.mf.api.amx.AmxNodeStates

getState

なし

AmxNodeの現在の状態を取得します(adf.mf.api.amx.AmxNodeStatesの定数値として)。

void

setState

state

AmxNodeadf.mf.api.amx.AmxNodeStates状態を移動します。MAFまたはAmxNodeのタイプ・ハンドラによってのみコールされる必要があります。

HTMLElement

render

なし

AmxNodeをレンダリングします。

レンダリングされたルート要素または子がレンダリングされていない場合やこのAmxNodeのタイプ・ハンドラがない場合はnullが返されます。

Array<HTMLElement>

renderDescendants

String facetName,

Object key

このAmxNodeのサブノードをレンダリングします(可能な場合は、一番近い子孫にフラット化します)。

facetNamenullでない場合、そのファセットの子をレンダリングします。facetNameがnullの場合は、非ファセットの子がレンダリングされます。

そのスタンプ・キーに対する子AmxNodeインスタンスのレンダリングには、オプションのキーが使用されます。

subNodeにルート要素の配列が返されます。

void

rerender

なし

AmxNodeを再レンダリングします。

Boolean

isRendered

なし

レンダリングすべきかどうかを確認するために、AmxNodeの状態をチェックします。

AmxNodeABLE_TO_RENDER, RENDEREDまたはPARTIALLY_RENDEREDの状態の場合、レンダリング可能とみなされます。

void

refresh

adf.mf.api.amx.AmxAttributeChange attributeChanges,

adf.mf.api.amx.AmxDescendentChanges descendentChanges

AmxNodeのDOMをリフレッシュします。

このメソッドはupdateChildrenメソッドの後にコールされ、変更に応じてDOMを更新するタイプ・ハンドラによって実装される必要があります。

void

createStampedChildren

Object stampKey,

Array<String> facetNamesToInclude,

Function filterCallback

カスタムcreateChildrenNodes関数内から子AmxNodeインスタンスを作成するために子をスタンプするタイプ・ハンドラにとって便利な関数。

この関数は、任意のUIタグに子を作成します。

facetNamesToIncludeが空の場合、このスタンプに対してファセットは処理されません。facetNamesToIncludenullの場合は、すべてのファセットが処理されます。facetNamesToIncludeが配列内にnull値を含む場合は、非ファセット・タグの子が作成されます。

filterCallbackは、作成される子をフィルタ処理するためのオプションの関数です。filterCallback関数は、AmxNodestampKey、子タグおよびファセット名(非ファセットの場合はnull)を使用して起動されます。filterCallback関数は、booleanを返す必要があります。trueの場合、子を作成するためにタグが使用され、falseの場合、タグは処理されません。


19.2.5 AmxTagの使用方法

表19-5に、カスタムUIコンポーネントの作成に使用できるAmxTagのAPIをリストします。

表19-5

戻り型 関数名 パラメータ 説明

String

getNamespace

なし

タグのXMLネームスペースURIを取得します。

String

getNsPrefixedName

なし

ネームスペースを含むタグ名をその接頭辞(ローカルのxmlns接頭辞ではなく)として返します。

これは、http://xmlns.example.com/custom:customなどのXML完全名です。

String

getName

なし

タグ名を取得します。

これは、接頭辞なしのローカルXMLタグ名です。

adf.mf.api.amx.AmxTag

getParent

なし

親タグまたは最上位の場合はnullを取得します。

String

getTextContent

なし

タグのテキスト・コンテンツを返します。

Array<adf.mf.api.amx.AmxTag>

findTags

String namespace,

String tagName

指定されたネームスペースおよびタグ名を使用して、タグ階層でタグを再帰的に検索します。

一致する場合は現在のタグを返します。

Array<adf.mf.api.amx.AmxTag>

getChildren

String namespace,

String tagName

タグの子を取得します。

子のネームスペースおよびタグ名に対するオプションのフィルタ処理を指定します。ネームスペースがnullの場合、すべての子が返されます。tagNamenullの場合、子はタグ名でフィルタ処理されません。

Array<adf.mf.api.amx.AmxTag>

getChildrenFacetTags

なし

すべての子ファセット・タグを取得します。

この関数は、AmxNode処理の作成を支援します。

adf.mf.api.amx.AmxTag

getChildFacetTag

String name

指定された名前のファセット・タグを取得します。

この関数は、ファセットの存在がタイプ・ハンドラの動作を変更する場合にコードを支援します。

ファセットが見つからない場合はnullを返します。

Array<adf.mf.api.amx.AmxTag>

getChildrenUITags

なし

UIタグであるすべての子タグを取得します。

この関数は、AmxNode処理の作成に役立ちます。

この関数はファセット・タグを返しません。

Array<String>

getAttributeNames

なし

タグで指定されている属性の属性名をすべて取得します。

Boolean

isAttributeElBound

String name

指定されている属性がEL式にバインドされているかどうか(静的値ではなく)を特定します。

String

getAttribute

String name

指定された名前の属性の属性値(EL文字列の場合があります)を取得します。

属性が指定されていない場合は、未定義が返されます。

Map<String, String>

getAttributes

なし

属性値およびその値のキーと値のペアのマップを取得します。

Boolean

isUITag

なし

ノードがタイプ・ハンドラを使用するUIかどうか、およびコンテンツをレンダリングするかどうかを特定します。

Object{name:string, children:Array<adf.mf.api.amx.AmxTag>}

getFacet

なし

このファセットの子のタグを、およびこのタグがファセット・タグの場合はファセットの名前を取得します。

これは、AmxNodeツリーの構築に役立つ便利な関数です。

ファセットの名前およびファセットの子タグとともにオブジェクトを返します。ファセットがamx:facetタグでない場合はnullを返します。

adf.mf.api.amx.AmxNode

buildAmxNode

adf.mf.api.amx.AmxNode parentNode,

Object stampKey

このタグのAmxNodeの新しいインスタンスを指定されたスタンプIDで作成します。

タグがファセット・タグの場合、このタグは子タグのAmxNodeを作成します。

この関数はAmxNodeを初期化しません。かわりに、初期化されていないAmxNodeまたは非UIタグの場合はnullを返します。

adf.mf.api.amx.TypeHandler

getTypeHandler

なし

このタグのタイプ・ハンドラを取得します。


19.2.6 VisitContextの使用方法

表19-6に、カスタムUIコンポーネントの作成時に使用できるVisitContextのAPIをリストします。

表19-6 VisitContext API

戻り型 関数名 パラメータ 説明

Boolean

isVisitAll

なし

すべてのノードが訪問可能かどうかを特定します。

Array<adf.mf.api.amx.AmxNode>

getNodesToWalk

なし

訪問の際に訪問する必要のあるノードを取得します。

このリストには、訪問すべきノード(コールバックが起動されました)を含む必要はありません。

Array<adf.mf.api.amx.AmxNode>

getNodesToVisit

なし

訪問するノードのリストを取得します。

Array<adf.mf.api.amx.AmxNode>

getChildrenToWalk

adf.mf.api.amx.AmxNode parentAmxNode

指定された親AmxNodeの訪問すべき子AmxNodeインスタンス(存在する場合はファセットを含む)を特定します。

タイプ・ハンドラに対して、すべての子を訪問しない場合の子の訪問方法の最適化を許可します。

nullを返す場合があります。


19.2.7 AmxAttributeChangeの使用方法

表19-7に、カスタムUIコンポーネントの作成時に使用できるAmxAttributeChangeのAPIをリストします。

表19-7 AmxAttributeChange API

戻り型 関数名 パラメータ 説明

Array<String>

getChangedAttributeNames

なし

現在の変更に影響を受けた属性の名前を取得します。

Boolean

isCollectionChange

String name

属性の変更がコレクション変更かどうかを特定します。

adf.mf.api.amx.AmxCollectionChange

getCollectionChange

String name

属性のコレクション・モデルの変更情報を取得します。使用できる変更オブジェクトがない場合はnullを返します。

String

getOldValue

String name

変更が実行される前の属性の値を取得します。

Boolean

hasChanged

String name

指定された名前の属性が変更されたかどうかを特定します。

Number

getSize

なし

属性の変更数を取得します。


19.2.8 AmxDescendentChangesの使用方法

表19-8に、カスタムUIコンポーネントの作成時に使用できるAmxAttributeChangeのAPIをリストします。

表19-8 AmxDescendentChanges API

戻り型 関数名 パラメータ 説明

Array<adf.mf.api.amx.AmxNode>

getAffectedNodes

なし

レンダリング前の変更済の子孫AmxNodeインスタンスを取得します。

adf.mf.api.amx.AmxAttributeChange

getChanges

adf.mf.api.amx.AmxNode amxNode

指定されたAmxNodeの変更を取得します。

adf.mf.api.amx.AmxNodeStates

getPreviousNodeState

adf.mf.api.amx.AmxNode amxNode

変更が適用される前の子孫AmxNodeの状態を取得します。


19.2.9 AmxCollectionChangeの使用方法

表19-9に、カスタムUIコンポーネントの作成時に使用できるAmxCollectionChangeのAPIをリストします。

表19-9 AmxCollectionChange API

戻り型 関数名 パラメータ 説明

Boolean

isItemized

なし

コレクションに対する変更が項目化される可能性があるかどうかを特定しますが、そのコレクションのキーおよび要素は識別されているため、TypeHandlerは、リスト全体を最初から再レンダリングするのではなく、適切な項目のみを更新できます。

Array<String>

getCreatedKeys

なし

作成されたキーの配列、または変更を項目化できない場合はnullを取得します。

Array<String>

getDeletedKeys

なし

削除されたキーの配列、または変更を項目化できない場合はnullを取得します。

Array<String>

getUpdatedKeys

なし

更新されたキーの配列、または変更を項目化できない場合はnullを取得します。

Array<String>

getDirtiedKeys

なし

ダーティな状態のキーの配列、または変更を項目化できない場合はnullを取得します。


19.2.10 AmxNodeChangeResultの使用方法

表19-10に、カスタムUIコンポーネントの作成時に使用できるAmxNodeChangeResultのAPIをリストします。

表19-10 AmxNodeChangeResult API

メンバー 説明

adf.mf.api.amx.AmxNodeChangeResult["NONE"]

レンダリングされていない子孫AmxNode上の属性変更に対応してアクションは行いません。

adf.mf.api.amx.AmxNodeChangeResult["REFRESH"]

属性およびその子AmxNodeインスタンスはタイプ・ハンドラによって更新済で、DOMはタイプ・ハンドラのrefresh関数によって更新されます。

adf.mf.api.amx.AmxNodeChangeResult["RERENDER"]

AmxNodeおよびその子AmxNodeインスタンスがタイプ・ハンドラによって更新済ですが、DOMは、AmxNode階層を変更する必要がないため、refresh関数がタイプ・ハンドラでコールされない場合にのみ再作成する必要があります。

adf.mf.api.amx.AmxNodeChangeResult["REPLACE"]

タイプ・ハンドラは変更を処理できません。DOMおよびAmxNode階層は再作成される必要があります。

この値は、タイプ・ハンドラ上のupdateChildrenメソッドからのみ返され、getDescendentChangeActionメソッドからは返すことができません。


19.2.11 AmxNodeStatesの使用方法

表19-11に、カスタムUIコンポーネントの作成時に使用できるAmxNodeStates APIを示します。

表19-11 AmxNodeStates API

メンバー 説明

adf.mf.api.amx.AmxNodeStates["INITIAL"]

初期状態。AmxNodeは作成されましたが移入されていません。

adf.mf.api.amx.AmxNodeStates["WAITING_ON_EL_EVALUATION"]

レンダリングに必要なELベースの属性はまだ完全にロードされていません。

adf.mf.api.amx.AmxNodeStates["ABLE_TO_RENDER"]

EL属性はロードされましたが、AmxNodeはまだレンダリングされていません。

adf.mf.api.amx.AmxNodeStates["PARTIALLY_RENDERED"]

ELはまだ完全にロードされていませんが、AmxNodeは部分的にレンダリングされました(今後の使用のために予約済)。

adf.mf.api.amx.AmxNodeStates["RENDERED"]

AmxNodeは完全にレンダリングされました。

adf.mf.api.amx.AmxNodeStates["UNRENDERED"]

AmxNodeはレンダリングされません。


19.2.12 AmxNodeUpdateArgumentsの使用方法

表19-12に、カスタムUIコンポーネントの作成時に使用できるAmxNodeUpdateArgumentsのAPIをリストします。

表19-12 AmxNodeUpdateArguments API

戻り型 関数名 パラメータ 説明

Array<adf.mf.api.amx.AmxNode>

getAffectedNodes

なし

影響を受けるAmxNodeインスタンスの配列を取得します。

Map<String,Boolean>

getAffectedAttributes

String amxNodeId

指定されたAmxNode IDの影響される属性を表すオブジェクトを取得します。

Map<String,adf.mf.api.amx.AmxCollectionChange>

getCollectionChanges

String amxNodeId

指定されたAmxNodeおよびプロパティのコレクション変更を取得します。

返されるマップは、属性名によってキー設定されます。

AmxNodeに変更がない場合は未定義が返されます。

void

setAffectedAttribute

adf.mf.api.amx.AmxNode amxNode,

String attributeName

AmxNodeの属性を影響を受けたとマークします。

void

setCollectionChanges

String amxNodeId,

String attributeName,

adf.mf.api.amx.AmxCollectionChange collectionChanges

指定されたAmxNodeの属性のコレクション変更を設定します。


19.3 カスタム・コンポーネントの作成

JavaScriptおよびMAF APIを使用して、カスタムUIコンポーネントを作成できます。このコンポーネントのJavaScriptファイルは、アプリケーション機能レベルの包含を介して、プロジェクトに追加できます。カスタム・タグ・ライブラリを追加すると、「コンポーネント」ウィンドウのタグ・ライブラリのリストに組み込まれ、このライブラリが選択されると、カスタム・コンポーネントが「コンポーネント」ウィンドウで使用可能になり、その属性が「プロパティ」ウィンドウに表示されます。

始める前に:

第19.2項、「MAF APIを使用したカスタム・コンポーネントの作成」に記載されているAPIを確認してください。

カスタム・コンポーネントを作成するには、次の手順を実行します。

  1. adf.mf.api.amx.TypeHandler.register APIを使用して、タグ・ネームスペースおよび一連の1つ以上のタイプ・ハンドラを登録するJavaScriptファイルを作成します(表19-1「静的API」およびこの項の後続の例を参照)。

  2. タイプ・ハンドラごとにレンダリング・メンバー関数を実装します。

  3. オプションで、その他の関数を実装します。

  4. 1つ以上のJavaScriptファイルおよびCSSファイルをMAF AMXアプリケーション機能にアタッチします。たとえば、「ファイル」「新」「MAFサンプル」にある次のサンプル・アプリケーションを参照してください。

    • CompGalleryというMAFサンプル・アプリケーションに含まれているcustom.jsファイルおよびcustom.cssファイル。

    • WorkBetterサンプル・アプリケーションには、カスタムの検索コンポーネントが含まれています。

    または、デザインタイム・パッケージングを実行できます。

  5. カスタム・コンポーネントのうちの1つを使用するMAF AMXページごとに、次のようにxmlnsエントリをview要素に追加します。

    xmlns:custom="http://xmlns.example.com/custom"
    

次の例は、カスタム・コンポーネントを宣言するJavaScriptファイルを示しています。

(function() {
   // TypeHandler for custom "x" elements
   var x = adf.mf.api.amx.TypeHandler.register("http://xmlns.example.com/custom",                                                "x");
   x.prototype.render = function(amxNode) {
      var rootElement = document.createElement("div");
      rootElement.appendChild(document.createTextNode("Hello World"));
      return rootElement;
   };

   // TypeHandler for custom "y" elements
   var y = adf.mf.api.amx.TypeHandler.register("http://xmlns.example.com/custom",
                                               "y");

   y.prototype.render = function(amxNode) {
      var rootElement = document.createElement("div");
      rootElement.appendChild(document.createTextNode("Goodbye World"));
      return rootElement;
   };

})();

カスタムUIコンポーネントの使用方法の例は、CompGalleryというMAFサンプル・アプリケーションに含まれているcustom.amxcustomOther.amxexampleEvents.amxおよびexampleList.amxの各ファイルを参照してください。このサンプル・アプリケーションは、「ファイル」「新」「MAFサンプル」にあります。