元件可包含將在其他元件中執行動作的觸發程式。您必須註冊觸發程式,元件才能夠引發觸發程式。
元件提供有效負載給觸發程式,這會傳送到觸發程式引發時所執行的任何動作。您可以為每個觸發程式選取將被執行的動作。為共同運作而建立的元件,可以在無須使用者互動的情況下,自動引發觸發程式來執行動作。
註冊觸發程式
就自訂元件而言,觸發程式會註冊成為元件之註冊資料的一部分。若要新增觸發程式,請更新元件支援之各個觸發程式的 "triggers" 特性陣列。此外,還必須指定觸發程式支援的有效負載,如此才能建立使用者介面,讓使用者可以將有效負載內的值對應至動作所支援的特性。
appinfo.json 檔案並複查 "triggers":[], 項目:
"triggers": [{
"triggerName": "helloWorldWhoAreYou",
"triggerDescription": "Show Who I Am",
"triggerPayload": [{
"name": "whoAreYou",
"displayName": "Who I Am"
}]
}],將檔案同步到網站伺服器。
在此範例觸發程式項目中,您定義了 triggerName ("helloWorldWhoAreYou")。此名稱值必須是唯一的。接著,提供觸發程式的描述 ("Show Who I Am"),供使用者介面對話方塊用來顯示您的觸發程式。最後,為觸發程式定義單一值有效負載;使用者將可以選取此有效負載中的項目,將項目對應至動作的欄位。
觸發程式註冊之後,當您前往元件「設定值」面板中的連結頁籤時,應該就能夠見到並選取該觸發程式。
引發觸發程式
元件可在任意點引發觸發程式。觸發程式通常由使用者互動引發,例如點選按鈕或選取表格中的資料列。元件可根據任意條件引發觸發程式,例如因 REST API 呼叫而造成資料變更時。您可以在觸發程式引發後執行任意數目的動作。
render.js 檔案並在 viewModel 物件中新增 JavaScript 函數,此函數將會呼叫 Sites SDK 來引發觸發程式。
self.raiseTrigger = function (triggerName) {
SitesSDK.publish(SitesSDK.MESSAGE_TYPES.TRIGGER_ACTIONS, {
'triggerName': 'helloWorldWhoAreYou',
'triggerPayload': { "whoAreYou": "This is " + self.whoAreYou() + "!"}
});
};-edit template.html),並且在 </div> 之前新增一個按鈕。
<button data-bind="click raiseTrigger">Who Am I?</button>
將 render.js 檔案同步或上傳至您的 Oracle Content Management 執行處理伺服器。
在 ViewModel 物件中,您建立了一個點選按鈕後所呼叫的 JavaScript 函數。此函數會呼叫 Sites SDK 並指示它觸發為此觸發程式 "helloWorldWhoAreYou" 定義的所有動作。此函數也透過包含單一欄位 ("whoAreYou") 的 triggerPayload 傳送。"helloWorldWhoAreYou" 和 "whoAreYou" 這兩個值會是您在上一個步驟中註冊觸發程式時輸入的值。
註:
沒有預先定義的動作執行順序。雖然動作會依所列示的順序呼叫,但並不會等待動作完成後才呼叫下一個動作。如果某個動作進行非同步呼叫,在下一個動作執行前它也許還沒完成。