單頁應用程式 (SPA) 可為網站使用者提供引人入勝的體驗。開發人員希望能使用SPA架構建立網站,而作者則想在Adobe Experience Manager (AEM)中順暢地編輯使用這類架構建立之網站的內容。
本文介紹當請前端開發人員開發SPA for AEM時需要考慮的重要問題,並提供在AEM上部署SPA的AEM架構概覽。
SPA編輯器是建議解決方案,供需要SPA架構使用者端轉譯(例如React或Angular)的專案使用。
在 AEM 開發單頁應用程式是假設前端開發人員在建立 SPA 時有遵守標準最佳做法。如果您身為前端開發人員,遵循這些一般最佳實務和一些AEM特定原則,您的SPA將以下列功能運作 AEM及其內容製作功能.
如果您在開發SPA時牢記這些原則,在啟用所有支援的AEM編寫功能時,將會儘可能靈活且經得起未來考驗。
如果您不需要支援AEM編寫功能,您可能需要考慮其他功能 SPA設計模型.
如同開發任何元件一樣,元件的設計應儘可能提高可攜性。 應避免任何影響元件可移植性或可重複使用的模式,以確保未來相容性、彈性和可維護性。
產生的SPA應使用可攜性強且可重複使用的元件建置。
前端開發人員必須自行負責建立用於建置應用程式的SPA元件資料庫。 前端開發人員可完全控制元件的內部結構。 不過,AEM在任何時候都擁有網站結構。
這表示前端開發人員可以在元件的進入點之前或之後新增客戶內容,且也可以在元件內進行第三方呼叫。 不過,前端開發人員無法完全控制元件的巢狀內嵌方式。
SPA應該僅依賴內容的動態呈現。 這是AEM擷取並轉譯內容結構之所有子項的預設預期。
任何指向特定內容的明確呈現都會視為靜態呈現,雖然支援此功能,但不會與AEM內容製作功能相容。 這也違反以下原則: 可攜性.
如同演算一樣,所有路由也應該是動態的。 在AEM中, SPA應一律擁有路由 和AEM會監聽它,並根據它擷取內容。
任何靜態路由都適用於 可攜性原則 和會因為與AEM的內容製作功能不相容而限製作者。 例如,使用靜態路由,如果內容作者想要變更路由或變更頁面,作者必須要求前端開發人員執行此操作。
任何 AEM 專案都應使用 AEM 專案原型,它支援使用 React 或 Angular 的 SPA 專案並使用 SPA SDK。
如果 在AEM中開發SPA的原則 之後,您的SPA將可使用所有支援的AEM內容製作功能。
不過,在某些情況下,這並非完全必要。 下表概述各種設計模型、其優點和缺點。
設計模型 |
優點 | 缺點 |
---|---|---|
AEM用作Headless CMS,而不使用 SPA Editor SDK架構。 | 前端開發人員可完全控制應用程式。 | 內容作者無法使用AEM內容製作體驗。 如果程式碼包含靜態參考或路由,則無法移植或重複使用。 不允許使用範本編輯器,因此前端開發人員必須透過JCR維護可編輯的範本。 |
前端開發人員使用SPA Editor SDK架構,但只對內容作者開啟部分割槽域。 | 開發人員只會在應用程式的受限制區域中啟用撰寫,就能保持對應用程式的控制。 | 內容作者受限於有限的AEM內容製作體驗。 如果程式碼包含靜態參考或路由,則可能無法移植或重複使用。 不允許使用範本編輯器,因此前端開發人員必須透過JCR維護可編輯的範本。 |
專案完全運用SPA編輯器SDK,前端元件會開發為程式庫,而應用程式的內容結構會委派給AEM。 | 應用程式可重複使用且可移植。 內容作者可使用AEM內容製作體驗來編輯應用程式。 SPA與範本編輯器相容。 |
開發人員無法控制應用程式的結構和委派給AEM的內容部分。 開發人員仍可保留應用程式的區域,以供不應使用AEM編寫的內容使用。 |
雖然AEM支援所有模型,但僅實作第三種(因此遵循建議的) AEM中的SPA開發原則)內容作者是否能夠在AEM中與慣用的SPA內容互動及編輯內容。
一般而言,如果您的SPA遵循 AEM的SPA開發原則,則您的SPA將在AEM中運作,並可使用AEM SPA編輯器編輯。
請依照下列步驟,讓現有的SPA準備好與AEM搭配使用。
將您的JS元件模組化。
使其能夠以任何順序、位置和大小呈現。
使用Adobe SDK提供的容器,將您的元件放置在畫面上。
AEM提供頁面和段落系統元件供您使用。
為每個JS元件建立AEM元件。
AEM元件會定義對話方塊和JSON輸出。
讓前端開發人員建立AEM適用的SPA的主要工作是就元件及其JSON模型達成共識。
以下概述前端開發人員在開發適用於AEM的SPA時需要遵循的步驟。
同意元件及其JSON模型
前端開發人員和後端AEM開發人員需要就哪些元件是必要元件和型號達成一致,以便從SPA元件和後端元件進行一對一比對。
AEM元件仍然主要用於提供編輯對話方塊和匯出元件模型。
在React元件中,透過以下方式存取模型this.props.cqModel
在同意元件及JSON模型就緒後,前端開發人員即可自由開發SPA,並可透過以下方式存取JSON模型 this.props.cqModel
.
實作元件的 render()
方法
前端開發人員實作 render()
方法以適合的方式呈現,而且可以使用 cqModel
屬性。 這會輸出插入到頁面中的DOM和HTML片段。 這是在React中建立應用程式的標準方式。
透過以下方式將元件對應到AEM資源型別MapTo()
對應會儲存元件類別,並由提供的在內部使用 Container
根據指定的資源型別擷取及動態例項化元件的元件。
這是前端與後端之間的「粘合劑」,因此編輯器可以知道react元件對應到哪些元件。
此 Page
和 ResponsiveGrid
是延伸基底類別的良好範例 Container
.
定義元件的 EditConfig
作為引數MapTo()
只要尚未轉譯或沒有可轉譯的內容,此引數是告訴編輯器元件應如何命名所必需的。
擴充提供的 Container
頁面和容器的類別
頁面和段落系統應該擴充此類別,好讓委派給內部元件的功能如預期般運作。
實作路由解決方案,該解決方案使用HTML5 History
API。
當 ModelRouter
已啟用,呼叫 pushState
和 replaceState
函式觸發要求 PageModelManager
以擷取模型的遺失片段。
目前版本的 ModelRouter
僅支援使用指向Sling模型進入點的實際資源路徑的URL。 不支援使用虛名URL或別名。
此 ModelRouter
可停用或設定為忽略規則運算式清單。
這些程式碼區塊說明您的React和Angular元件如何不需要任何特定於Adobe或AEM的內容。
此 MapTo
helper是「粘合劑」,可讓後端和前端元件搭配使用:
如需關於使用的詳細資訊 MapTo
以及建置SPA for AEM的一般資訊,請參閱所選架構的快速入門手冊。
AEM的一般架構,包括開發、製作和發佈環境,在使用SPA時不會變更。 不過,瞭解SPA開發如何適應此架構很有幫助。
組建環境
這是SPA應用程式來源和元件來源出庫的位置。
AEM 作者
內容是在AEM作者上建立的,包括編寫SPA。
在製作環境中使用SPA編輯器編輯SPA時:
cq-data
屬性。cq-data
屬性可讓編輯器載入其他頁面資訊,以便知道哪些編輯設定可供元件使用。AEM 發佈
這是發佈編寫的內容和編譯的程式庫(包括SPA應用程式人工因素、clientlibs和元件)以供公眾使用的位置。
Dispatcher / CDN
Dispatcher是網站訪客的AEM快取階層。
在AEM內部,不需要執行JavaScript建置機制或執行JavaScript本身。 AEM僅代管來自SPA應用程式的編譯成品。
如需如何在AEM中建構簡單SPA及其運作方式的概觀,請參閱兩者的快速入門手冊 React 和 angular.
如需建立您自己的SPA的逐步指南,請參閱 AEM SPA編輯器快速入門 — WKND事件教學課程.
如需有關動態模型到元件對應的更多詳細資訊,以及它在AEM中SPA的運作方式,請參閱文章 SPA的動態模型到元件對應.
如果您想在AEM中為React或Angular以外的框架實作SPA,或只是想深入瞭解AEM適用的SPA SDK的運作方式,請參閱 SPA Blueprint 文章。