深入學習SAP UI5框架代碼系列之二:UI5 控制項的渲染器

2021-01-08 騰訊網

系列目錄

(2) UI5 控制項渲染機制(本文)

(3) HTML原生事件 VS SAP UI5 Semantic事件

(4) UI5控制項元數據實現細節

(5) UI5控制項的實例數據實現細節

(6) UI5控制項數據綁定的實現原理

(7) UI5控制項數據綁定的三種模式:One Way,Two Way和OneTime實現原理比較

(8) UI5控制項ID的生成邏輯

(9) UI5控制項的多語言(國際化,Internationalization,i18n)支持的實現原理

(10) XML視圖裡的button控制項

(11) button控制項和它背後的DOM元素

使用Jerry的文章一個用於SAP UI5學習的腳手架應用,沒有任何後臺API的依賴,創建一個只包含一個button控制項的SAP UI5應用,用Chrome開發者工具裡的Elements工具欄查看該button控制項的原生HTML代碼:

在ButtonRenderer.render函數裡設置斷點,然後F5刷新頁面,斷點觸發,就可從調用棧觀察到RenderManager是如何調用ButtonRenderer執行渲染工作的。

下圖畫得有些亂,意圖是想表達,最終渲染出的HTML原始碼裡的button標籤的各個屬性,分別是由ButtonRenderer哪一行代碼實現的。

Jerry剛剛做SAP UI5開發時,了解到Renderer機制後,心裡有個疑問,SAP UI5怎麼知道button控制項的渲染器是ButtonRenderer。換言之,SAP UI5控制項和其渲染器之間的一一對應關係是如何維護的?

SAP UI5框架裡,每類控制項都各自維護了一份Metadata(元數據),其中有個getRenderer方法,返回控制項對應的渲染器名稱。

關於SAP UI5控制項元數據,本系列後續文章會介紹。

從下圖第42971行能夠看出:控制項的渲染器滿足命名規範:+ "Renderer", 一個簡單的字符串拼接操作。

RenderManager在哪些時刻會開啟控制項的重繪?

讓我們對腳手架應用裡的button點擊事件處理函數稍作修改:每次點擊按鈕時,調用setText修改button的text屬性:

點擊按鈕,發現ButtonRenderer.render再次被觸發。

原因在於,oButton1.setText最終會調用button原型鏈上的ManagedObject.setProperty方法,該方法內部有一個顯式的invalidate調用。

如果忘記了SAP UI5控制項的原型鏈設計,可以查看Jerry之前的文章:深入學習SAP UI5框架代碼系列之一:UI5 Module的懶加載機制

Control.invalidate內部經過計算,會得出當前頁面需要重繪的區域,最終調用RenderManager進行重繪。

我們再來簡單了解下Angular裡的控制項繪製。以SAP Spartacus的產品轉盤(Product Carousel)顯示控制項為例: 最暢銷的產品共有12款,分多屏顯示在轉盤控制項裡,每屏顯示若干個產品。通過控制項提供的左右箭頭,進行屏與屏之間的切換。轉盤底部的小紅點,表示當前轉盤顯示的是第幾個屏幕的數據。

SAP UI5也能實現類似的複合控制項,官方稱呼為Custom Control.

Spartacus產品轉盤控制項的HTML代碼表現形式為標籤cx-product-carousel,內部重用了另一個自定義標籤cx-carousel:

當前顯示在屏幕裡的產品信息,通過cx-carousel標籤裡三個class為item active的div標籤顯示。

這個自定義產品轉盤控制項通過Spartacus裡的Angular Product Carousel Component實現。

Product Carousel Component的layout實現裡,將Component自身的屬性items$title$作為輸入,傳入另一個Component cx-carousel, 讓其將屬性值title$作為轉盤的標題渲染,而轉盤的數據源,來自傳入的屬性items$.

因為cx-carousel是一個可重用控制項,除了顯示產品轉盤外,還可以用於顯示其他同類實體的轉盤顯示,比如折扣轉盤,促銷活動轉盤等等。因此,除了將items$title$傳入cx-carousel之外,還需要告知後者,在轉盤內部,以何種布局邏輯顯示轉盤的每一個元素。

因此,下圖第九行通過標籤定義了一個id為#carouselItem的模板,將此id一併傳入cx-carousel. 這樣,轉盤控制項在運行時,針對轉盤數據源items$內存儲的每一個產品數據,就會按照此模板定義的布局,進行繪製。

當初Jerry學習Spartacus這個產品轉盤的設計時,覺得很親切,因為其設計思路和SAP UI5List Binding(Aggregation Binding)是一致的:

https://sapui5.hana.ondemand.com/#/topic/91f057786f4d1014b6dd926db0e91070.html

SAP UI5官網上講解List Binding的一個例子:

有一個companies JSON數組:

將companies路徑傳入List控制項,完成了數據源的指定,通知List去繪製companies數組裡的數據。具體渲染哪些數據?List不知道,需要items子控制項來定義,比如子控制項的title屬性,顯示JSON數組的name欄位,description屬性,顯示JSON數組的city欄位。List會根據JSON數組裡的company節點的個數,動態創建對應數目的items子控制項。

這裡的SAP UI5 items子控制項,扮演的就是本文之前介紹的Spartacus產品轉盤控制項頁面裡,用定義出的id為#carouselItem的模板同樣的角色。

感謝閱讀,本系列下一篇文章:HTML原生事件 VS SAP UI5 Semantic事件。

相關焦點

  • 微軟.NET 官宣跨平臺 UI 框架 MAUI
    IT之家5月21日消息 在Build 2020開發者大會上,微軟宣布推出 .NET 官宣跨平臺 UI 框架 MAUI,全稱是 .NET Multi-platform App UI。正式版將在 .NET 6 和大家見面。微軟介紹,你可以使用.NET進行任何構建。
  • 如何在Element框架使用日期控制項並獲取年齡
    瀏覽器技術vueelementJavaScriptCSS3在element框架項目中,日期控制項是一種常用的,可以顯示日期、時間和日期時間。那麼,如何使用日期控制項設置用戶出生日期?然後根據出生日期算出年齡。下面利用實例說明:操作步驟如下:1、打開HBuilderX工具,創建vue項目,然後新建vue文件
  • 2020年5個最佳Vue移動端組件庫|UI框架
    1、Mint UI餓了麼開源的移動端UI組件庫,基於vue.js的移動端UI框架,包含豐富的 CSS 和 JS 組件,能夠滿足日常的移動端開發需求。支持按需引入和後編譯,輕量靈活;擴展性強,可以方便地基於現有組件實現二次開發。
  • Web經典B/S快速開發框架,強大後臺+簡潔UI一體化開發工具
    框架本身是一個可二次開發的開發平臺,開發者可以根據開發嚮導進行配置直接生成功能模塊;但是他又是一套原始碼,開發者也可以直接在 VS 中基於框架開發,甚至還可以對開發框架進行開發擴展。4.強大的權限管理組件,完成業務功能開發後,系統可以直接使用通用權限來管理業務功能的操作權限及數據權限。
  • 十行代碼就能搞定深度學習?飛槳框架高層API,一起輕鬆玩轉AI
    機器之心發布機器之心編輯部嚮往深度學習技術,可是深度學習框架太難學怎麼辦?百度傾心打造飛槳框架高層 API,零基礎也能輕鬆上手深度學習,一起來看看吧?另:文末有福利,一定要看完呦~高層 API,What深度學習作為人工智慧時代的核心技術,近年來無論學術、還是工業領域,均發揮著愈加重要的作用。然而,深度學習理論太難學,開發過程太複雜,又將許多人拒之於深度學習的門外。
  • ui設計學習之配色攻略
    ui設計學習之配色攻略,有過ui設計培訓經驗的人都知道,配色的步驟是從確定主色開始,然後在選擇與之相匹配的副色,最後在根據排版、造型等方面進行增加點綴色。這不只需要ui設計師具備一定的色感能力,也需要設計師能夠理解色彩之間的關係,這樣才能夠合理的運用,而色相環就是我們認識顏色關係的重要工具,十二色相環由十二種基本顏色組成,包括三原色紅、黃、藍,再由原色混合產生二次色,二次色混合產生了三次色。
  • JeecgBoot 2.4 微服務正式版發布,基於 SpringBoot 的低代碼平臺
    支持翻頁多選 支持開關控制項的生成Online低代碼升級 Online報表支持合計功能 Online報表支持多表頭設置 Online表單導出支持高級查詢 Online表單同步資料庫,支持資料庫密碼加密 Online表單上傳文件圖片控制項,支持上傳個數設置
  • 統一作業系統UOS適配NTKO Office控制項:瀏覽器在線編輯文檔
    主要特性:1、支持在線打開doc、docx、xls、xlsx、wps、et格式文檔,並以二進位文件流的形式提交到伺服器;2、支持將Word文檔在線轉換為PDF、OFD版式文件並提交到伺服器或保存到本地;3、支持模板套紅、添加圖片、文字圖片水印
  • 盤點界面編程中那些常用控制項,詳解PyQt5中標籤控制項QLabel的使用
    PyQt比較受歡迎的地方在於其強大的控制項支持,從本篇開始,我將帶大家詳細了解下PyQt5中的一些常用控制項。喜歡Python編程的小夥伴們關注我,後續會推出一些GUI編程相關內容。動畫圖片),還可以被用作提示標記為其他控制項;一些純文本、連結或富文本可以顯示在QLabel標籤上。
  • Weta Digital的新渲染器Manuka
    編者按:看到Joe Letteri提出的理念"go after research wholeheartedly"(全身心追求研發),以及他們一路以來對這句話孜孜不倦的實踐,心頭有一種莫名的感動。Weta Digital的渲染研究總監Luca Fascione在同一篇報導中提出:「實驗最早源自對公司渲染流程的不同模型進行驗證,因此需要對質感模型及光線傳遞算法進行測試,又因為Veach的研究是所有path tracing中對光線算法最統一的方案,所以我們很大程度上參考了他的算法。」渲染器好寫,但能滿足生產製作的渲染器卻極其困難。
  • 不到1000行代碼,GitHub 1400星,天才黑客開源深度學習框架tinygrad
    機器之心報導機器之心編輯部最近,天才黑客 George Hotz 開源了一個小型深度學習框架 tinygrad,兼具 PyTorch 和 micrograd 的功能。
  • 8次迭代5大升級,曠視深度學習框架天元1.0預覽版正式發布
    機器之心發布機器之心編輯部AI 技術需要開源、開放。就在剛剛結束的中關村論壇曠視平行論壇中,曠視正式發布了天元 1.0 預覽版。9 月 18 日,中關村論壇曠視平行論壇中,曠視研究院院長、首席科學家孫劍正式發布了開源深度學習框架天元 1.0 預覽版,並對天元的技術特性與發展方向進行了深入解讀。曠視 2014 年開始研發深度學習框架天元。
  • 藉助Streamlit框架,可僅使用Python代碼來構建基於瀏覽器的UI
    全文共3154字,預計學習時長8分鐘圖源:unsplash藉助Streamlit框架,使用用戶界面展示Python項目變得前所未有的簡單,你可以僅僅使用Python代碼來構建基於瀏覽器的UI。StreamlitStreamlit是一種Web框架,旨在供數據科學家使用Python輕鬆部署模型和可視化。它運行速度既快又簡約,代碼既漂亮又對用戶友好。
  • 如何使用Element-UI中輸入框轉換成文本域
    在使用Vue+Element-UI框架項目過程中,如果不仔細看Element官網,你會發現表單控制項中沒有文本域。但當你仔細閱讀el-input控制項時,你會發現輸入框和文本域是共用一個控制項,只不過文本域需要加屬性type="textarea"工具HBuilderX技術
  • 谷歌Chrome 與 微軟 Edge 合作改善表單控制項 UI 及體驗
    IT之家3月31日消息 據Chromium官方博客,在過去的一年中,Google Chrome團隊和微軟Edge團隊合作,「對Chromium瀏覽器中的內置表單控制項進行了主體化和改進」,改善了按鈕、下拉菜單、複選框等HTML控制項的UI及體驗。
  • 2020年,一文點破跨平臺開發框架現狀
    跨平臺應用程式開發但還好我們還有一個跨平臺開發的選項,它允許用一段代碼同時為兩個作業系統開發應用。它並不固定使用某一種平臺的程式語言編寫代碼。而且,由於直接使用了系統原生控制項來呈現界面,它能為用戶提供近乎原生平臺應用的使用體驗。我要不要使用跨平臺開發這項技術?
  • Win 10 Xbox 遊戲欄新增小工具商店和UI透明度控制項
    IT之家7月2日消息 微軟今日推送了最新的 Windows 10 Dev 預覽版 Build 20161 系統更新,在該版本中,微軟帶來了一系列的新特性,除此前IT之家所述幾項外,還新增一個對遊戲玩家來說很實用的特性——Xbox 遊戲欄的 「小工具商店」。
  • 深度學習-Pytorch框架學習之模型訓練和測試
    前言前面四篇文章,介紹了模型搭建、數據準備及pytorch中常用的計算方法等,有了上述基礎後就可以訓練模型了,下面這篇文章會簡單介紹下在pytorch框架下如何訓練深度學習模型,以及一些常用代碼。模型訓練
  • FStorm1.3.5R渲染器 for 3dma20114-2020青雲漢化中文版
    FStorm1.3.5R渲染器,是一個運行於3dmax上支持N卡顯卡渲染的寫實渲染器,支持3dmax2014-2020x64位版本,FStorm渲染器運算速度很快,能渲染出令人驚嘆的逼真效果作品而深受設計師和渲染愛好者青睞。
  • 如何使用SAP Intelligent Robotic Process Automation自動操作Excel
    新建一個名叫jerryExcel的workflow,在工作流的activities面板裡輸入seq,找到類型為Sequence的Flow控制項。該控制項允許我們在工作流裡定義一系列順序執行的步驟。把Sequence控制項拖拽到工作流編輯區域裡,雙擊,就可以定義需要執行的詳細步驟了。