0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

动态模板语义分析-动态绑定XML

汽车电子技术 来源:程序猿搬砖 作者: 坏人 2023-03-03 10:06 次阅读

DynamicDSL将遵循以下的交互展示逻辑: 描述文件(XML,Widget) --->(绑定数据)--->渲染模板--->渲染--->事件驱动--->数据改变 这样循环下来的,最终我们看到的就是App上的界面与交互效果了。

这看上去和RN,flutter有点像,只是我们这个是特定场景的使用。

实现了AST节点,已经有了动态计算数据的能力,接下来我们将实现动态XML模板的绑定,为渲染前生成布局描述模板。

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

这个模板比较简单,它有一个根节点,根节点有一个子节点包含两个属性,我们用"{{ }}"来描述需要计算的表达式,如果没有两个大括号则认为是原始字符串。

「这里我们规定,布局模板必须在一个根节点下面!」

XML原始节点展示如下:

图片text节点可以直接计算出结果, color节点通过获取环境变量中名称为item的数据,再进一步获取其中名称为age的数据与20进行比较,再得到具体的值。

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

动态绑定之后结果如下:

图片

到此,可以认为这个XML是我们基础布局模板,可以拿给Flex引擎计算了。

在组件布局的时候还时常需要对组件节点进行重复或者显示与隐藏等操作,因此: 我们规定

for="{{for xx item xxs}}" 用于实现重复组件

if="{{ expr }}" 用于实现节点是否显示

现在我们将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原始节点展示如下:

图片

首先我们需要遍历节点的属性,查找到节点中for字段的值是否为一个有效的循环表达式,然后对该循环表达式进行计算展开,结果如下:

图片

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

**「这里需要特别注意的是:For会产生一个新的变量环境,for语句中定义了一个新的变量,当我们在展开时需要将新的变量(item)注入到变量环境中,item将覆盖上一级环境变量中的item的值。

这与栈帧调用时的本地变量覆盖上一级范围中的变量是一样的道理。

」** 展开之后,item是items中的每一个元素而不是根节点上的item了。

此时再对每个节点进行消解运算

注入的环境变量如下:

图片

if语句相对简单一点,它不会产生新的变量,只需要对表达式求值,获取表达式的结果true则保留,false则删除节点不展示。

测试一下,对一个相对复杂的模板进行动态绑定:

<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 }}">
            

展示结果如下,「这里需要注意的是当一个父节点在循环的时候,它的子节点也同样会得到for生成的新变量,在展开子节点计算其属性时,也能获取到新的变量从而得到想要的结果。」

图片

到这里,动态绑定就差不多了,接下来就是将绑定后的模板交给Flex引擎,计算而已了。

如果你觉得这个文章对你有用,可以分享给更多的朋友。

谢谢!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6926

    浏览量

    88867
  • XML
    XML
    +关注

    关注

    0

    文章

    188

    浏览量

    33054
  • 渲染
    +关注

    关注

    0

    文章

    69

    浏览量

    10910
收藏 人收藏

    评论

    相关推荐

    基本共射放大电路的组成、静态分析动态分析

       分析基本共射放大电路的需要从静态和动态分析,静态指的是“直流通路在直流电源作用下直流电流流经的通路”,用于研究静态工作点,动态指的是“交流通路是输入信号作用下交流信号流经的通路”
    发表于 01-12 11:38 1.3w次阅读
    基本共射放大电路的组成、静态<b class='flag-5'>分析</b>及<b class='flag-5'>动态</b><b class='flag-5'>分析</b>

    请问Labview如何让多个按钮控件动态和enter键绑定

    labview是否有动态绑定功能或其他解决办法,即完成:在选项卡初测界面时,扫条码后能自动测试,在选项卡终测界面时,扫条码也能自动进入测试状态。
    发表于 01-21 21:03

    关于使用JQuery或JS动态添加的元素无法绑定事件的问题

    解决使用JQuery或JS动态添加的元素无法绑定事件的问题
    发表于 04-30 11:41

    动态ppt课件模板

    动态的ppt课件模板,带动画的细纹设计课件模版, 动态魔方课件模版
    发表于 12-03 19:10 0次下载
    <b class='flag-5'>动态</b>ppt课件<b class='flag-5'>模板</b>

    动态限载系统的设计和分析

    动态限载系统的设计和分析 Design and Analysis of Dynamic Load Limit System
    发表于 03-16 15:01 8次下载

    某装备结构动态特性分析

    利用试验模态分析法获得了某机枪结构的模态参数,分析了机枪的动态特性,并通过基于模态试验的灵敏度分析方法,获得了影响该机枪动态特性的敏感部位,
    发表于 10-10 14:29 13次下载

    多级放大电路的动态分析

    多级放大电路的动态分析 1 电压放大倍数压放大倍数 2
    发表于 05-23 16:56 6535次阅读
    多级放大电路的<b class='flag-5'>动态</b><b class='flag-5'>分析</b>

    Java解析XML的一种数据绑定技术

    文中为了进一步用Java语言有效地解析XML文件,提出了一套XML文件与Java程序的绑定技术,通过该技术方法能够使开发人员方便地将XML文件在不同平台之间进行交互,达到跨平台的目的,
    发表于 08-29 14:44 0次下载

    一种新的基于素数的XML动态编码方法_田帅

    一种新的基于素数的XML动态编码方法_田帅
    发表于 03-19 11:45 0次下载

    一种可在动态环境下构建语义地图的算法

    Localization And Mapping,SLAM)算法已经可以达到较高的定位和制图精度,但是在动态环境下如何通过剔除动态物体来获得较髙的定位精度,以及理解周围场景中存在的物体及其位置信息等问题没有得到很好的解决。在此,文中提出了一种可在
    发表于 05-07 14:56 4次下载

    双极性晶体管的动态分析

    既然有静态分析,当然也会伴随着动态分析。静态分析是去掉了放大电路中的交流成分,那么,动态自然是去掉了放大电路中的直流成分。
    的头像 发表于 08-14 16:34 1696次阅读
    双极性晶体管的<b class='flag-5'>动态</b><b class='flag-5'>分析</b>

    共射极放大电路的动态参数 动态分析步骤

      共射极放大电路的动态分析是指在考虑信号输入时,分析电路的放大性能和频率特性。在动态分析中,需要考虑晶体管的非线性特性以及输入和输出信号的
    发表于 02-27 11:12 4527次阅读

    动态模板-流程设计

    动态绑定XML的逻辑已经完成了,接下来就是拆分整合各模块,实现渲染流程的每一个环节。
    的头像 发表于 03-03 10:05 537次阅读
    <b class='flag-5'>动态</b><b class='flag-5'>模板</b>-流程设计

    动态模板语义分析-实现AST节点

    我们已经实现了数据类型的定义,在此基础上我们就可以来实现我们的数据节点了。 在实现某个具体节点(比如一无表达式节点)之前,我们需要抽象出一个基类SemaASTNode
    的头像 发表于 03-03 10:09 619次阅读

    一个动态环境下的实时语义RGB-D SLAM系统

    大多数现有的视觉SLAM方法严重依赖于静态世界假设,在动态环境中很容易失效。本文提出了一个动态环境下的实时语义RGB-D SLAM系统,该系统能够检测已知和未知的运动物体。为了减少计算成本,其只对
    的头像 发表于 08-25 16:49 615次阅读
    一个<b class='flag-5'>动态</b>环境下的实时<b class='flag-5'>语义</b>RGB-D SLAM系统