salesforce零基礎學習(九十一)Facet


說Facet以前,我們先說一下瀏覽器加載解析以及渲染的過程。瀏覽器獲取一個HTML的文件時,會按照自上向下的順序進行解析,並在加載過程中進行渲染。對html解析成DOM樹,對CSS 解析成CSS Rule樹,然后通過DOM數以及CSS Rule樹構造Rendering樹。

接下來轉回Facet,Facet是什么?有哪些的使用場景呢?

Facet 可以理解成一個占位符,這個占位符用於對父組件的指定的部分進行重新渲染。 很多組件都有默認的渲染,如果默認的渲染的結果不是你想要得到的結果,可以使用facet進行重新的渲染。通過Facet對默認組件進行重新渲染,從而生成你想要的Rendering樹,展示你想要的自定義的UI。

因為Facet是一個占位符,所以Facet不會單獨的出現在外層的組件,只會作為父元素組建的一個子進行出現。當然也不是所有的元素都可以使用Facet,只有部分的組件元素可以使用Facet。Facet既可以使用在lightning中,也可以使用到classic中。Facet在classic中使用 apex:facet 組件,在lightning中使用Aura.Component。

classic中Facet可以搭配的常用的父組件有:

apex:dataTable /apex:actionStatus / apex:column / apex:relatedList等,不同的組件支持的不同的自定義元素位置不同,具體可以查看API。

Classic使用

Demo舉例:針對Notes / Attachment related list, 標准提供的功能無法隱藏add按鈕,我們可以通過facet方式對apex:relatedList進行重新渲染,從而隱藏add按鈕。apex:relatedList可以對body,footer以及header進行重新渲染,demo中我們只渲染header,感興趣的可以操作其他的部分。

<apex:page standardController="Account">
   <apex:relatedList list="CombinedAttachments">
      <apex:facet name="header">
      <table>
        <
tr>
          <
td class="pbTitle">
            <
h3>Notes and Attachments</h3>
          </
td>
        </
tr>
      </
table>
    </
apex:facet> </apex:relatedList> </apex:page>

結果展示:

 Lightning使用

lightning中我們可以通過apex:attribute作為value provider作為參數傳遞以及使用,有兩個主要屬性,一個是name,一個是type,當type聲明為Aura:Component或者Aura:Component[]情況下,可以在父組件中動態傳遞參數進行渲染以及解析。

Demo舉例:動態傳遞參數,加載時傳遞參數才解析(demo來源於官方文檔)。

 c:facetHeader:此元素組件聲明了一個header的attribute,類型為Aura.Component,當父元素組件引用此元素並且賦值情況下,便可以動態的加載賦值。這里面有一個{!v.body}需要說明,針對lightning,每個aura:component都會內置一個body的屬性,當父調用此元素時,此元素內部的body部分便會作為v.body進行渲染。

<aura:component>
  <aura:attribute name="header" type="Aura.Component[]"/>
  <div>
    <span class="header">{!v.header}</span><br/>
  </div>
</aura:component>

c:helloFacet:此元素組件引用了facetHeader元素組件,其中 Nice body!將會作為facetHeader的body內容進行渲染,我們動態的賦值了header內容進行渲染。

<aura:component>
    See how we set the header facet.<br/>
    <c:facetHeader>
        Nice body!
        <aura:set attribute="header">
            Hello Header!
        </aura:set>
    </c:facetHeader> 
</aura:component>

結果展示:

總結:此篇只是簡單的介紹了Facet的使用,Facet針對classic的組件可以進行很多的定制,比如table展示哪些固定的列,apex:actionStatus 做loading效果的起始截止樣式等。感興趣的可以自行試驗,篇中有問題的歡迎提出,有不懂的歡迎留言。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM