2016-07-26 60 views
1

我想要實現的是,如果我有2層組件的節點:負荷僅部分顯示的腳本,在當前頁面

  • COMPONENT1

    • clientlib
      • COMPONENT1 .js
  • COMPONENT2

    • clientlib
      • component2.js

,我拖曳到第1頁,則產生第1頁時,僅component1.js和COMPONENT2 .js將在導航到page1時加載。

一種方法,我看到是使用自定義Tag Library如下所述:http://www.icidigital.com/blog/best-approaches-clientlibs-aem-part-3/

我有兩個問題:

1)是否有在AEM現有的功能來做到這一點?

2)如果不是,創建這樣的自定義Tag Library最簡單的方法是什麼?

編輯:

假定有沒有能力,只是包括所有組件clientLibs,而只加載那些添加到頁面。

+0

這是開箱即用的AEM。這是[AEM 6.2的官方文檔](https://docs.adobe.com/docs/en/aem/6-2/develop/the-basics/clientlibs.html),也適用於以前的版本。 – Abhishek

+0

它只描述瞭如何加載特定類別的腳本..我找不到如何加載當前頁面中組件的腳本的引用,所以其他具有相同類別的組件的腳本不在該頁面中已加載,ty – jony89

+0

應該使用與該組件相對應的唯一類別來定義組件特定的腳本。因此,當您跨頁面使用相同的組件時,將包含這些腳本。如果您爲多個組件的腳本提供了一個通用類別,那麼它們應該在所有這些組件中提供一些通用功能。 – Abhishek

回答

0

理論上這樣做的可能的方法是在你的頁面組件/抽象的頁面組件,做這樣的事情來寫劇本 -

第一步:字符串路徑= currentPage.getPath()

第二步:查詢此組件的路徑(一種方法是讓主列表在sling:resourceType上執行contains子句)

步驟3:用戶資源解析程序在步驟3中解析resourceType,這將爲您提供應用程序下的資源。

步驟4:從他們

從在步驟4中的客戶機庫資源得到的類別和包括JS:從上面的資源獲取子資源與主類型爲CQ:ClientLibraryFolder

步驟5

你實際上可以編寫一個模型來調整組件資源到clientLibrary以實際清理代碼。

讓我知道如果你需要實際的代碼,我可以寫在我的空閒時間。

1

沒有內置的功能來做到這一點。雖然我聽說客戶端基礎架構正在被重新編寫,所以我對未來會添加類似的東西感到樂觀。

我們有,而且我知道其他公司已經創建了一個「延遲腳本標記」。 Ours是一個非常簡單的標記,它包含一個像clientlib include這樣的HTML塊,將它添加到一個唯一的列表中,然後在頁腳的外部調用中,將其全部吐出。

下面是一個擴展BodyTagSupport的簡單標籤實現的核心。然後在你的頁腳中抓取屬性並寫出來。

public int doEndTag() throws JspException { 
    SlingHttpServletRequest request = (SlingHttpServletRequest)pageContext.getAttribute("slingRequest"); 

    Set<String> delayed = (Set<String>)request.getAttribute(DELAYED_INCLUDE); 

    if(delayed == null){ 
     delayed = new HashSet<String>(); 
    } 

    if(StringUtils.isNotBlank(this.bodyContent.getString())){ 
     delayed.add(this.bodyContent.getString().trim()); 
    } 

    request.setAttribute(DELAYED_INCLUDE, delayed); 
    return EVAL_PAGE; 
}