このステップでは、ローカル・コンポーネント用に作成されたデフォルト・ファイルの構造をレビューします。
単純なHello World
例の場合、4つのJavaScriptオブジェクトおよびコード行の数は多すぎるように見えますが、これはさらに複雑なコンポーネントを構築し、Oracle Cloud Sites Serviceページのライフサイクルを持つインタラクションを処理するための基本を提供するためのものです。
ローカル・コンポーネントの構造を確認するには:
Oracle Content Managementホーム・ページで、「開発者」をクリックします。
「開発者」ページが表示されます。
「すべてのコンポーネントの表示」をクリックします。
メニューから、「ローカル・コンポーネントの作成」を選択します。
A_Local_Componentなど、コンポーネントの名前を入力します。
説明を入力します(オプション)。
「作成」をクリックします。
これを実行すると、コンポーネントのリストにA_Local_Component
という名前のコンポーネントが表示されます。
Oracle Content Managementデスクトップ同期クライアントを使用して、コンポーネントを検索し、それをファイル・システムと同期させます。
デスクトップ・クライアントがない場合は、すべてのコンポーネントを表示し、Oracle Content Managementインタフェースの「コンポーネント」ページでコンポーネントを選択し、ドリルダウンしてファイルを表示できます。
コンポーネントの下にあるファイルをリストする場合は、次のようなファイルが表示されます。
assets render.js settings.html appinfo.json _folder_icon.jpg
/assets
ディレクトリにあるrender.js
ファイルを開きます。
render.js
ファイルの主要なポイントは次のとおりです。
JavaScript AMDモジュールとして構造化されるため、ページで必須にできます。
これには、Oracle Content Managementページの一部としてすでにロードされているKnockoutJSおよびJQueryへの参照も含まれています。
render.js
ファイルの構造を考えます。
render.js
ファイルのコンテンツには、2つのJavaScriptオブジェクトがあり、これは必要なOracle Content ManagementコンポーネントのAPI (sampleComponentFactory
およびSampleComponentImpl
)を実装しています。これらのオブジェクトは、コンポーネントに基づいたKnockoutJSを作成するための実装例です。これらのオブジェクトの実装は、使用しているテクノロジに基づいて変化します。
sampleComponentFactory
このオブジェクトは、render.js
AMDモジュールによって返されます。
これは非常に単純なファクトリ・オブジェクトであり、1つのcreateComponent()
インタフェースを実装しています。
さらに複雑な実装では、viewMode
パラメータに基づいてコンポーネントの別の実装を返すために渡されるargs
値を使用できます。これにより、サイト・ビルダーと比べると、かなり軽量に実行時のコンポーネントを実装できるようになります。
SampleComponentImpl
このオブジェクト内の主な関数はrender
関数で、ページのコンポーネントをレンダリングする際に使用されます。
Knockout
コンポーネントをページにレンダリングするには、render
関数は動的にテンプレートをページに追加してから、viewModel
バインドをテンプレートに適用します。
残りの実装では、viewModel
パラメータとテンプレートの初期化、およびページとコンポーネント間のメッセージ送信を処理します。
render.js
ファイル内の最後の2つのオブジェクト(sampleComponentTemplate
およびSampleComponentViewModel
)は、コンポーネントに対してカスタムの実装を提供します。次の実装は、要件によって異なります。
sampleComponentTemplate
このオブジェクトではKnockoutJSテンプレートの作成を提供しています。これは、コンポーネントですべてのデータが初期化されてから表示を試みるまで待機します。
SampleComponentViewModel
viewModel
はコンポーネントのかわりにOracle Content Managementによって格納された情報を取得し、そのデータに基づいて適切にコンポーネントをレイアウトする方法を選択します
一般的なKnockoutオブザーバブルはテンプレートで使用され、コンポーネントのかわりに格納されたメタデータへのアクセスを処理します。
self.imageWidth = ko.observable('200px'); self.alignImage = ko.observable(); self.layout = ko.observable(); self.showTopLayout = ko.observable(); self.showStoryLayout = ko.observable();
トリガーとアクションの統合:
トリガー: ページの他のコンポーネントのアクションにバインド可能なコンポーネントからOracle Content Managementトリガーを呼び出す関数。
self.imageClicked = function (data, event) { self.raiseTrigger("imageClicked"); // matches appinfo.json };
アクション: コンポーネントが指定されたペイロードでアクションを実行するように指示されたときにコールバックを処理する関数。
self.executeActionsListener = function (args) { // get action and payload var payload = args.payload, action = args.action; // handle 'setImageWidth' actions if (action && action.actionName === 'setImageWidth') { $.each(payload, function(index, data) { if (data.name === 'imageWidth') { self.imageWidth(data.value); } }); } };
コールバックは必要に応じて登録済アクションを実行します。
SitesSDK.subscribe(SitesSDK.MESSAGE_TYPES.EXECUTE_ACTION, $.proxy(self.executeActionsListener, self));
コンポーネント・ライフサイクルへのサブスクリプション:
コンポーネントの初期化: すべてのデータがフェッチされるまでコンポーネントはレンダリングされません。これはKnockoutオブザーバブルによって処理されます。
self.componentLayoutInitialized = ko.observable(false); self.customSettingsDataInitialized = ko.observable(false);
必要なプロパティの初期値を取得します。これはコールバックによって処理され、データを取得します。
SitesSDK.getProperty('componentLayout', self.updateComponentLayout); SitesSDK.getProperty('customSettingsData', self.updateCustomSettingsData);
メタデータの更新: ユーザーが「設定」パネルを起動してデータを更新するときなど、コンポーネントのかわりに格納されたコンポーネント・メタデータが変更されるたびに、コールバックします。
SitesSDK.subscribe(SitesSDK.MESSAGE_TYPES.SETTINGS_UPDATED, $.proxy(self.updateSettings, self));
注:
Oracle Content Managementサーバーでは、常に.html
ファイルにmimeタイプを設定するため、.html
ファイルをアップロードしたり、これをロードするのに必要な"text!"
プラグインを使用することはできません。したがって、テンプレートの場合、別の拡張機能を使用して"text!"
プラグインによりこれをロードするか、シード済データに表示されているようにJavaScriptに直接インラインでロードする必要があります。ステップ2の結果の確認
カスタム・コンポーネントのレンダリング構造がどのように作成されているかについて概要を示します。動作を確認するには:
render.js
ファイルのsampleComponentTemplate
オブジェクトを更新して、次の行を変更します。次のコードを変更します:
'<!-- ko if: initialized -->'+
かわりに次のコードを使用します:
'<!-- ko if: initialized -->'+ '<div data-bind="text:\'image width is: \' + imageWidth()"></div>' +
コンポーネントをOracle Content Managementインスタンス・サーバーに同期またはアップロードします。
サイト内のページを編集し、A_Local_Component
カスタム・コンポーネントをページにドロップします。
この時点で、コンポーネントにimage width is: 260px
が表示されます。
「設定」パネルを開き、「カスタム設定」ボタンをクリックします。
「イメージの幅」フィールドを300pxに変更します。
デフォルト・イメージはサイズが260pxから300pxに拡張されます。
追加したテキストがimage width is 300px
に更新されます。
「ステップ3: ローカル・コンポーネント設定の構造のレビュー」に進みます。