0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

動態(tài)模板語義分析-動態(tài)綁定XML

汽車電子技術(shù) ? 來源:程序猿搬磚 ? 作者: 壞人 ? 2023-03-03 10:06 ? 次閱讀

DynamicDSL將遵循以下的交互展示邏輯: 描述文件(XML,Widget) --->(綁定數(shù)據(jù))--->渲染模板--->渲染--->事件驅(qū)動--->數(shù)據(jù)改變 這樣循環(huán)下來的,最終我們看到的就是App上的界面與交互效果了。

這看上去和RN,flutter有點像,只是我們這個是特定場景的使用。

實現(xiàn)了AST節(jié)點,已經(jīng)有了動態(tài)計算數(shù)據(jù)的能力,接下來我們將實現(xiàn)動態(tài)XML模板的綁定,為渲染前生成布局描述模板。

<View>
    <View text="年齡: {{ 33.22 * 2}}" color="{{ item[age] >= 20 ? '#FFFFFF' : '#DDDDDD' }}" />
class="hljs-name"View>

這個模板比較簡單,它有一個根節(jié)點,根節(jié)點有一個子節(jié)點包含兩個屬性,我們用"{{ }}"來描述需要計算的表達式,如果沒有兩個大括號則認為是原始字符串。

「這里我們規(guī)定,布局模板必須在一個根節(jié)點下面!」

XML原始節(jié)點展示如下:

圖片text節(jié)點可以直接計算出結(jié)果, color節(jié)點通過獲取環(huán)境變量中名稱為item的數(shù)據(jù),再進一步獲取其中名稱為age的數(shù)據(jù)與20進行比較,再得到具體的值。

R"({"item":{"age": 30}})"

動態(tài)綁定之后結(jié)果如下:

圖片

到此,可以認為這個XML是我們基礎(chǔ)布局模板,可以拿給Flex引擎計算了。

在組件布局的時候還時常需要對組件節(jié)點進行重復(fù)或者顯示與隱藏等操作,因此: 我們規(guī)定

for="{{for xx item xxs}}" 用于實現(xiàn)重復(fù)組件

if="{{ expr }}" 用于實現(xiàn)節(jié)點是否顯示

現(xiàn)在我們將XML的描述修改成下面這樣:

<View>
    <View text="年齡: {{ 33.22 * 2}}" info="{{ item[name] }} : {{item[age]}}" color="{{ item[age] >= 20 ? '#FFFFFF' : '#DDDDDD' }}" for="{{ for item in items }}"/>
class="hljs-name"View>

XML原始節(jié)點展示如下:

圖片

首先我們需要遍歷節(jié)點的屬性,查找到節(jié)點中for字段的值是否為一個有效的循環(huán)表達式,然后對該循環(huán)表達式進行計算展開,結(jié)果如下:

圖片

R"({"item":{"age": 30},"items":[{"name": "小強", "age": 28},{"name": "小明", "age": 23},{"name": "小紅", "age": 18}]})"

**「這里需要特別注意的是:For會產(chǎn)生一個新的變量環(huán)境,for語句中定義了一個新的變量,當(dāng)我們在展開時需要將新的變量(item)注入到變量環(huán)境中,item將覆蓋上一級環(huán)境變量中的item的值。

這與棧幀調(diào)用時的本地變量覆蓋上一級范圍中的變量是一樣的道理。

」** 展開之后,item是items中的每一個元素而不是根節(jié)點上的item了。

此時再對每個節(jié)點進行消解運算

注入的環(huán)境變量如下:

圖片

if語句相對簡單一點,它不會產(chǎn)生新的變量,只需要對表達式求值,獲取表達式的結(jié)果true則保留,false則刪除節(jié)點不展示。

測試一下,對一個相對復(fù)雜的模板進行動態(tài)綁定:

<View>
    <View text="年齡: {{ 33.22 * 2}}" color="{{ item[age] >= 20 ? '#FFFFFF' : '#DDDDDD' }}" for="{{ for item in items }}">
    class="hljs-name"View>
    <View>
        <View for="{{ for item in items }}">
            

展示結(jié)果如下,「這里需要注意的是當(dāng)一個父節(jié)點在循環(huán)的時候,它的子節(jié)點也同樣會得到for生成的新變量,在展開子節(jié)點計算其屬性時,也能獲取到新的變量從而得到想要的結(jié)果?!?/strong>

圖片

到這里,動態(tài)綁定就差不多了,接下來就是將綁定后的模板交給Flex引擎,計算而已了。

如果你覺得這個文章對你有用,可以分享給更多的朋友。

謝謝!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    6808

    瀏覽量

    88743
  • XML
    XML
    +關(guān)注

    關(guān)注

    0

    文章

    187

    瀏覽量

    33022
  • 渲染
    +關(guān)注

    關(guān)注

    0

    文章

    69

    瀏覽量

    10901
收藏 人收藏

    評論

    相關(guān)推薦

    基本共射放大電路的組成、靜態(tài)分析動態(tài)分析

       分析基本共射放大電路的需要從靜態(tài)和動態(tài)分析,靜態(tài)指的是“直流通路在直流電源作用下直流電流流經(jīng)的通路”,用于研究靜態(tài)工作點,動態(tài)指的是“交流通路是輸入信號作用下交流信號流經(jīng)的通路”
    發(fā)表于 01-12 11:38 ?1.3w次閱讀
    基本共射放大電路的組成、靜態(tài)<b class='flag-5'>分析</b>及<b class='flag-5'>動態(tài)</b><b class='flag-5'>分析</b>

    請問Labview如何讓多個按鈕控件動態(tài)和enter鍵綁定

    labview是否有動態(tài)綁定功能或其他解決辦法,即完成:在選項卡初測界面時,掃條碼后能自動測試,在選項卡終測界面時,掃條碼也能自動進入測試狀態(tài)。
    發(fā)表于 01-21 21:03

    關(guān)于使用JQuery或JS動態(tài)添加的元素?zé)o法綁定事件的問題

    解決使用JQuery或JS動態(tài)添加的元素?zé)o法綁定事件的問題
    發(fā)表于 04-30 11:41

    動態(tài)ppt課件模板

    動態(tài)的ppt課件模板,帶動畫的細紋設(shè)計課件模版, 動態(tài)魔方課件模版
    發(fā)表于 12-03 19:10 ?0次下載
    <b class='flag-5'>動態(tài)</b>ppt課件<b class='flag-5'>模板</b>

    動態(tài)限載系統(tǒng)的設(shè)計和分析

    動態(tài)限載系統(tǒng)的設(shè)計和分析 Design and Analysis of Dynamic Load Limit System
    發(fā)表于 03-16 15:01 ?8次下載

    某裝備結(jié)構(gòu)動態(tài)特性分析

    利用試驗?zāi)B(tài)分析法獲得了某機槍結(jié)構(gòu)的模態(tài)參數(shù),分析了機槍的動態(tài)特性,并通過基于模態(tài)試驗的靈敏度分析方法,獲得了影響該機槍動態(tài)特性的敏感部位,
    發(fā)表于 10-10 14:29 ?13次下載

    多級放大電路的動態(tài)分析

    多級放大電路的動態(tài)分析 1 電壓放大倍數(shù)壓放大倍數(shù) 2
    發(fā)表于 05-23 16:56 ?6475次閱讀
    多級放大電路的<b class='flag-5'>動態(tài)</b><b class='flag-5'>分析</b>

    Java解析XML的一種數(shù)據(jù)綁定技術(shù)

    文中為了進一步用Java語言有效地解析XML文件,提出了一套XML文件與Java程序的綁定技術(shù),通過該技術(shù)方法能夠使開發(fā)人員方便地將XML文件在不同平臺之間進行交互,達到跨平臺的目的,
    發(fā)表于 08-29 14:44 ?0次下載

    一種新的基于素數(shù)的XML動態(tài)編碼方法_田帥

    一種新的基于素數(shù)的XML動態(tài)編碼方法_田帥
    發(fā)表于 03-19 11:45 ?0次下載

    一種可在動態(tài)環(huán)境下構(gòu)建語義地圖的算法

    Localization And Mapping,SLAM)算法已經(jīng)可以達到較高的定位和制圖精度,但是在動態(tài)環(huán)境下如何通過剔除動態(tài)物體來獲得較髙的定位精度,以及理解周圍場景中存在的物體及其位置信息等問題沒有得到很好的解決。在此,文中提出了一種可在
    發(fā)表于 05-07 14:56 ?4次下載

    雙極性晶體管的動態(tài)分析

    既然有靜態(tài)分析,當(dāng)然也會伴隨著動態(tài)分析。靜態(tài)分析是去掉了放大電路中的交流成分,那么,動態(tài)自然是去掉了放大電路中的直流成分。
    的頭像 發(fā)表于 08-14 16:34 ?1661次閱讀
    雙極性晶體管的<b class='flag-5'>動態(tài)</b><b class='flag-5'>分析</b>

    共射極放大電路的動態(tài)參數(shù) 動態(tài)分析步驟

      共射極放大電路的動態(tài)分析是指在考慮信號輸入時,分析電路的放大性能和頻率特性。在動態(tài)分析中,需要考慮晶體管的非線性特性以及輸入和輸出信號的
    發(fā)表于 02-27 11:12 ?4323次閱讀

    動態(tài)模板-流程設(shè)計

    動態(tài)綁定XML的邏輯已經(jīng)完成了,接下來就是拆分整合各模塊,實現(xiàn)渲染流程的每一個環(huán)節(jié)。
    的頭像 發(fā)表于 03-03 10:05 ?520次閱讀
    <b class='flag-5'>動態(tài)</b><b class='flag-5'>模板</b>-流程設(shè)計

    動態(tài)模板語義分析-實現(xiàn)AST節(jié)點

    我們已經(jīng)實現(xiàn)了數(shù)據(jù)類型的定義,在此基礎(chǔ)上我們就可以來實現(xiàn)我們的數(shù)據(jù)節(jié)點了。 在實現(xiàn)某個具體節(jié)點(比如一無表達式節(jié)點)之前,我們需要抽象出一個基類SemaASTNode
    的頭像 發(fā)表于 03-03 10:09 ?606次閱讀

    一個動態(tài)環(huán)境下的實時語義RGB-D SLAM系統(tǒng)

    大多數(shù)現(xiàn)有的視覺SLAM方法嚴重依賴于靜態(tài)世界假設(shè),在動態(tài)環(huán)境中很容易失效。本文提出了一個動態(tài)環(huán)境下的實時語義RGB-D SLAM系統(tǒng),該系統(tǒng)能夠檢測已知和未知的運動物體。為了減少計算成本,其只對
    的頭像 發(fā)表于 08-25 16:49 ?581次閱讀
    一個<b class='flag-5'>動態(tài)</b>環(huán)境下的實時<b class='flag-5'>語義</b>RGB-D SLAM系統(tǒng)