【项目6 UI Demo】前端代码记录

这篇具有很好参考价值的文章主要介绍了【项目6 UI Demo】前端代码记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前端代码记录

1.GridListItem中的布局

【项目6 UI Demo】前端代码记录,工作笔记,ui,前端,SAPUI5

在这个Item中的布局采用的是VBoxHBox相结合的方式。相关的代码如下:

<VBox class="sapUiTinyMargin">
    <HBox justifyContent="SpaceBetween">
        <Title
            text="{ToolNumber}"
            wrapping="true"
            titleStyle="H5"
        />
        <t:InfoLabel
            text="{Status}"
            colorScheme="{
				path: 'Status',
				formatter: '.formatter.getStatusColorScheme'
			}"
        />
    </HBox>
    <Label
        text="{Description}"
        wrapping="true"
        class="sapUiTinyMarginBottom"
    />
</VBox>

在这个布局中,首先采用了一个垂直的VBox做为一个整体的布局,然后再VBox中嵌套了一个HBox用于显示挂具号以及状态。
需要注意的是,因为默认情况下挂具号和挂具状态会左对齐,如果想要实现图片中的效果,需要给HBox添加一个对其的属性,让它里面的控件两端对齐。justifyContent="SpaceBetween"

2.GridList中的模式

GridList中有多种选择模式:

  • MultiSelect:多选
  • SingleSelect:默认的单选按钮在右边
  • SingleSelectLeft:单选按钮在左边
  • SingleSelectMaster:不显示单选或者多选框
  • Delete:删除
  • None:无

【项目6 UI Demo】前端代码记录,工作笔记,ui,前端,SAPUI5

需要注意的是:点击Item和点击Item上的单选或多选按钮触发不同的事件。如果点击单选或多选框,触发的是onSelectionChange,而如果点击这个item的其他位置,则触发的是onPress事件。
但是:如果模式为SingleSelectMaster,那么点击item的任意位置都会触发onSelectionChange,而onPress事件则不会在该模式下生效。

3.自定义Formatter的使用方法

从上面的项目截图中可以看到,针对Available和Occupied两种状态,info标签的颜色是不一样的。如何实现这一功能,就需要自定义格式化器。格式化器包含在js代码中。

前端代码如下:

<t:InfoLabel
    text="{Status}"
    colorScheme="{
		path: 'Status',
		formatter: '.formatter.getStatusColorScheme'
	}"
/>

代码解释:前端代码中colorScheme属性需要接受一个整型数字,不同的数字代表不同的颜色。针对这一个属性,我们调用了一个格式化器。其中path为我们的输入参数,这个参数会传递到js代码中对应的函数中。formatter属性指定的就是我们要调用的js函数。

formatter: {
	getStatusColorScheme: function (sStatus) {
		// Check the value of Status and return the corresponding colorScheme
		if (sStatus === "Available") {
			return 7;
		} else if (sStatus === "Occupied") {
			return 3;
		} else {
			// Return a default value if none of the above conditions match
			return "defaultColorScheme";
		}
	},
},

代码解释:在js代码中,我们接受前端传递过来的参数,根据前端传递过来的不同参数返回不同的值,这个返回的值就会直接赋值给colorScheme属性,从而根据不同的内容动态的改变不同颜色的标签。

4.常用的一些UI5的内部类

在布局过程中,通常会使用Margin或者Padding,UI5提供了一些内置的布局类,如:

  • sapUiTinyMarginBottom

其中Tiny还可以是SmallLarge等参数
Bottom还可以是Top Begin End

5.数据绑定

在这个项目的代码中,用到了两个JSON模型,涉及到一些关于数据绑定的问题。JSON数据如下:

var oModel = new JSONModel({
	ToolNumberCollection: [
		{ ToolNumber: "RP0001", Description: "这是一个测试", Status: "Available", ToolGroup: "Tool Group NO.1" },
		{ ToolNumber: "RP0002", Description: "这是一个测试", Status: "Available", ToolGroup: "Tool Group NO.1" },
		{ ToolNumber: "RP0003", Description: "这是一个测试", Status: "Available", ToolGroup: "Tool Group NO.2" },
		{ ToolNumber: "RP0004", Description: "这是一个测试", Status: "Occupied", ToolGroup: "Tool Group NO.1" },
		{ ToolNumber: "RP0005", Description: "这是一个测试", Status: "Occupied", ToolGroup: "Tool Group NO.2" },
		{ ToolNumber: "RP0006", Description: "这是一个测试", Status: "Occupied", ToolGroup: "Tool Group NO.1" },
		{ ToolNumber: "RP0007", Description: "这是一个测试", Status: "Occupied", ToolGroup: "Tool Group NO.3" },
		{ ToolNumber: "RP0008", Description: "这是一个测试", Status: "Occupied", ToolGroup: "Tool Group NO.3" },
		{ ToolNumber: "RP0009", Description: "这是一个测试", Status: "Available", ToolGroup: "Tool Group NO.2" },
		{ ToolNumber: "RP0010", Description: "这是一个测试", Status: "Available", ToolGroup: "Tool Group NO.2" },
		{ ToolNumber: "RP0011", Description: "这是一个测试", Status: "Available", ToolGroup: "Tool Group NO.3" },

	]
});


var orders = new JSONModel({
	Orders: [
		{ Type: "领头生产订单", OrderNumber: "1603212332", Description: "物料描述:机加工阀体 MFH-22-3-3", Rate: "挂具占比: 25%", precent: 25, Count: "45", Status: "Processing" },
		{ Type: "可选生产订单", OrderNumber: "1603212331", Description: "物料描述:机加工阀体 MFH-22-3-3", Rate: "挂具占比: 87%", precent: 87, Count: "41", Status: "Available" },
		{ Type: "可选生产订单", OrderNumber: "1603212333", Description: "物料描述:机加工阀体 MFH-22-3-3", Rate: "挂具占比: 57%", precent: 57, Count: "35", Status: "Available" },
		{ Type: "可选生产订单", OrderNumber: "1603212331", Description: "物料描述:机加工阀体 MFH-22-3-3", Rate: "挂具占比: 54%", precent: 54, Count: "41", Status: "Available" },
		{ Type: "可选生产订单", OrderNumber: "1603212333", Description: "物料描述:机加工阀体 MFH-22-3-3", Rate: "挂具占比: 25%", precent: 25, Count: "35", Status: "Available" },
		{ Type: "可选生产订单", OrderNumber: "1603212331", Description: "物料描述:机加工阀体 MFH-22-3-3", Rate: "挂具占比: 32%", precent: 32, Count: "41", Status: "Available" },
		{ Type: "可选生产订单", OrderNumber: "1603212333", Description: "物料描述:机加工阀体 MFH-22-3-3", Rate: "挂具占比: 56%", precent: 56, Count: "35", Status: "Available" },
		{ Type: "可选生产订单", OrderNumber: "1603212331", Description: "物料描述:机加工阀体 MFH-22-3-3", Rate: "挂具占比: 43%", precent: 43, Count: "41", Status: "Available" },
		{ Type: "可选生产订单", OrderNumber: "1603212333", Description: "物料描述:机加工阀体 MFH-22-3-3", Rate: "挂具占比: 54%", precent: 54, Count: "35", Status: "Available" },
	]
});
this.getView().setModel(orders, "orders");

this.getView().setModel(oModel);

上面这个例子中创建了两个模型,并设置到了view中。在xml中我们要将这些模型绑定到对应的List中去。对于第一个模型,因为设置的时候没有设置名字,那么名字就为空this.getView().setModel(oModel)

那么在xml代码中应该采用下面的方式进行数据绑定

<f:GridList
    id="toolList2"
    items="{
			path: '/ToolNumberCollection',
			sorter: {
				path: 'ToolGroup',
				group: true
			},
	}"
    mode="SingleSelectMaster"
    selectionChange="onselectionchange"
>"

需要注意path: '/ToolNumberCollection'

此外,我们要想访问模型对应的某一些字段的值,应该如下操作:

<Label
    text="{Description}"
    wrapping="true"
    class="sapUiTinyMarginBottom"
/>

对于第二个模型,因为我们已经设置了它的名字this.getView().setModel(orders, "orders"),因此在xml中进行数据绑定的时候就需要写模型的名字,如下所示:

<List
    id="orderList3"
    items="{orders>/Orders}"
    growing="true"
    growingThreshold="3"
    itemPress=".onOrderItemPress"
>

关于items="{orders>/Orders}"的解释:这一行代码实际上绑定了orders对象的Orders数组,让orders成为一个遍历器,依次遍历Orders数组中的每一个元素。
如果用Java代码来说明的话。类似于:

for(Order order : orders) {
.....
}

其中items="{orders>/Orders}"中的orders就相当于Java代码中的order

6.Text和Label以及Title控件等文字控件

  • Label控件常用属性
    • text 用于设置Label的内容
    • design 用于设置文字样式。只有两个选项Standard Bold
  • Text控件常用属性
    • text 用于设置Label的内容
  • Title控件常用属性
    • text 用于设置Label的内容
    • titleStyle 可以设置标题的层级,和HTML中的h1-h6保持一致。

上述的文字控件实际上对文字样式的调整非常有限,在某些情况下需要更加复杂的文字样式定义。比如在本项目中,我们想让数量单位PC的文字更细一些,采用上述的控件就不可以了。我们可以使用FormattedText控件。这个控件可以让你直接插入HTML代码,可以使用span标签实现对样式的控制。实现文字粗细的代码如下:

 <FormattedText
     htmlText="&lt;span style='font-weight:100; font-size:14px'>PC&lt;/span>"
     width="24px"
     textAlign="Right"
 />

需要注意的是,HTML代码中的标签的<这个符号需要转义,否则会报错

7.图标控件

默认情况下的图标颜色都是黑白的,有些情况下,可能会想要修改图标的颜色,可以使用color属性来控制颜色,支持似乎用RGB坐标。

<core:Icon
    size="2.7rem"
    src="{
			path: 'orders>Type',
			formatter: '.formatter.getIconForType'
		}"
    class="sapUiSmallMarginBegin"
    color="rgb(52,97,135)"
/>

8.进度条控件

在UI5中提供了进度条控件来显示事件的进度。该控件的主要属性有一下几个:

  • percentValue 实际的百分比 用于显示进度条的百分比
  • displayValue 显示的百分比,在进度条上会以文字的方式显示百分比,这个属性控制显示的数值
  • state状态,和ValueState,可以配合formatter实现不同的百分比显示不同颜色的进度条
<ProgressIndicator
    percentValue="{orders>precent}"
    displayValue="{orders>precent}%"
    state="{path: 'orders>precent', formatter: '.formatter.getStateForPercentValue'}"
    width="15%"
/>

【项目6 UI Demo】前端代码记录,工作笔记,ui,前端,SAPUI5

9.获取自定义控件中绑定的数据

在这个项目中有这样一个需求,当点击提交按钮后,系统会从挂具List和订单List中找到所有的勾选的Item,然后获取到Item中的相关内容,例如挂具号,订单号,订单状态等信息。通常获取这种方式有两种。第一种就是一层一层的获取到对应的标签,然后在获取标签中的相关属性。例如获取挂具号:

下面是xml代码:

<f:GridListItem>
    <VBox
        height="100%"
        justifyContent="SpaceBetween"
    >
        <layoutData>
            <FlexItemData
                growFactor="1"
                shrinkFactor="0"
            />
            <!-- Don't shrink below minimum size. Fill space if available. -->
        </layoutData>
        <VBox class="sapUiTinyMargin">
            <HBox justifyContent="SpaceBetween">
                <Title
                    text="{ToolNumber}"
                    wrapping="true"
                    titleStyle="H5"
                />
                <t:InfoLabel
                    text="{Status}"
                    colorScheme="{
						path: 'Status',
						formatter: '.formatter.getStatusColorScheme'
					}"
                />
            </HBox>
            <Label
                text="{Description}"
                wrapping="true"
                class="sapUiTinyMarginBottom"
            />
        </VBox>
    </VBox>
</f:GridListItem>

从代码中可以看出结构如下:

<VBox>
    <VBox >
        <HBox >
            <Title/>
            <t:InfoLabel/>
        </HBox>
        <Label/>
    </VBox>
</VBox>

我们要获取到Title,所以需要使用selectedToolNumberItem.getContent()[0].getItems()[0].getItems()[0].getItems()[0].getText();来一层一层的访问到对应的Title标签,在使用getText()从标签中获取对应的Text属性的值。

上面的例子可以看出,这种方式是比较麻烦的,而且如果xml的结构比较复杂,那么采用获取标签的这种方法就非常乱了。

因此,针对这种情况,我们可以使用另一种方式,通过使用getBindingContext来实现。

var toolNumber = selectedToolNumberItem.getBindingContext().getProperty("ToolNumber");

这里,通过getBindingContext获取到当前选中的selectedToolNumberItem所对应的绑定的JSON模型,然后再通过getProperty("ToolNumber")获取到对应JSON模型的对应字段。采用这种方式使得我们不需要再去关心xml的结构问题,更加快速和方便的获取再一些自定义布局组件中相关组件的属性值。

同样的例子,在下面的这个例子中,由于我们采用了CustomListItem组件,并且里面的结构相对比较复杂,如果我们采用获取标签的方式,就会导致我们的代码非常复杂且易读性降低。

<CustomListItem type="Active">
    <VBox
        class="sapUiSmallMarginBegin sapUiSmallMarginTopBottom sapUiTinyMarginBottom"
    >
        <Label
            text="{orders>Type}"
            design="Bold"
            wrapping="true"
        />
    </VBox>
    <HBox justifyContent="SpaceBetween">
        <HBox>
            <core:Icon
                size="2.7rem"
                src="{
					path: 'orders>Type',
					formatter: '.formatter.getIconForType'
				}"
                class="sapUiSmallMarginBegin"
                color="rgb(52,97,135)"
            />
            <VBox
                class="sapUiSmallMarginBegin sapUiTinyMarginTop"
            >
                <Title
                    text="{orders>OrderNumber}"
                    class="sapUiTinyMarginTop"
                    titleStyle="H4"
                    wrapping="true"
                />
            </VBox>
        </HBox>
        <VBox class="sapUiSmallMarginEnd">
            <Title
                text="{orders>Count}"
                titleStyle="H2"
                wrapping="true"
            />
            <FormattedText
                htmlText="&lt;span style='font-weight:100; font-size:14px'>PC&lt;/span>"
                width="24px"
                textAlign="Right"
            />
        </VBox>
    </HBox>
    <VBox class="sapUiSmallMarginBegin sapUiTinyMarginTop">
        <HBox justifyContent="SpaceBetween">
            <Label
                text="{orders>Description}"
                wrapping="true"
            />
            <t:InfoLabel
                text="{orders>Status}"
                colorScheme="{
					parts: ['orders>Status'],
					formatter: '.formatter.getStatusState'
				}"
                icon="{
					parts: ['orders>Status'],
					formatter: '.formatter.getIconForOrder'
				}"
                class="sapUiSmallMarginEnd"
            />
        </HBox>
        <HBox
            justifyContent="SpaceBetween"
            class="sapUiSmallTinyTop"
        >
            <Label
                text="{orders>Rate}"
                wrapping="true"
            />
            <Label
                text="Storage Location"
                class="sapUiSmallMarginEnd"
                design="Bold"
                wrapping="true"
            />
        </HBox>
        <ProgressIndicator
            percentValue="{orders>precent}"
            displayValue="{orders>precent}%"
            state="{path: 'orders>precent', formatter: '.formatter.getStateForPercentValue'}"
            width="15%"
        />
    </VBox>
</CustomListItem>

在上面的xml中如果我们想获取到订单号,采用获取标签的方式是不现实的,因此还是需要使用getBindingContext方法来实现,下面是对应的代码。文章来源地址https://www.toymoban.com/news/detail-622357.html

var oContext = selectedListItems[i].getBindingContext("orders");
var sOrderNumber = oContext.getProperty("OrderNumber");

到了这里,关于【项目6 UI Demo】前端代码记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • app-UI自动化测试项目代码框架

    1.1 测试用例 1、需求说明分析 已有的手工用例时,在结合自动化测试框架,来开发自动化用例时,则优先分析手工用例,再定出自动化测试的结构 1.2 app界面 2、界面分析 可以分别从模块层、界面层及交互层三个方向进行分析。 模块层 模块层是对 app 应用的整体结构划分,如

    2024年02月02日
    浏览(40)
  • 记录vue项目使用element-ui中日期选择器 (el-date-picker) 出现报错!!!

    今天在vue项目中使用elementUI 时间组件时候遇到了一个问题 在我使用日期时间选择器时, 控制台报错!!!!!! 一开始我一直以为是我父组件传值到子组件出了问题,但是我这个组件没有传值呀,而且系统流程能真正运行,就是控制台报错了,虽说也不影响什么,但是总是

    2024年02月16日
    浏览(55)
  • 宝塔+x-ui面板共存,并使用Cloudflare WARP一键脚本解决openai 1020错误代码的问题记录

    本文是根据网络上的资料后自行组合整理, 网站面板下载地址:宝塔 x-ui面板项目地址: x-ui Cloudflare WARP一键脚本项目地址: Cloudflare WARP 服务器版本:Ubuntu 22.04 x64 域名托管:cloudflare Ubuntu/Deepin安装脚本 这边的话根据自己配置来,后续可以安装cms 比如wordpress等 我这里用te

    2024年02月16日
    浏览(40)
  • 官方项目《内容示例》中Common UI部分笔记: 1.1 Activatable Widgets

    本文主要面向UMG以及Common UI的初学者 这个例子非常简单,定义了1+3个 Common Activatable Widget CommonUI_ActivatableWidgets 相当于一个容器包含了其它3个 Common Activatable Widget , CommonUI_ActivatableWidgets 里没有什么逻辑,窗口弹出/切换的逻辑在 CommonUI_BaseLayer 里, CommonUI_BaseLayer 通过变量引用

    2024年02月11日
    浏览(35)
  • QT学习开发笔记(项目实战之智能家居物联 UI 界面开发 )

    项目路径为 4/01_smarthome/01_smarthome/01_smarthome.pro,先看项目界面。项目界面如 下,采用暗黑主题设计,结合黄色作为亮色,让用户一目了然。界面笔者从一些智能家居界面 中找到灵感的,编写设计完成的效果不错!请自行查阅源码,掌握了本教程前面第七章的内容, 就可以理

    2024年02月16日
    浏览(50)
  • metaRTC集成flutter ui demo编译指南

    Flutter是由Google开发的开源UI工具包,用于构建跨平台应用程序,支持linux/windows/mac/android/ios等操作系统。 metaRTC新增flutter demo,支持linux/windows/mac/android/ios操作系统,此demo在ubuntu桌面环境下测试成功。 Release metartc7.0.072 with 3rdparty and runtime · metartc/metaRTC · GitHub A cross-platform we

    2024年02月06日
    浏览(58)
  • Java之Spring Boot+Vue+Element UI前后端分离项目,前端插件化主流框架和实现原理

    三、设置Axios发起请求统一前缀的路径 https://code100.blog.csdn.net/article/details/123302546 1、HelloWorld.vue getInfo() { this.$http.get(‘blog/queryBlogByPage?title=’ + this.title + ‘page=’ + this.page + ‘rows=’ + this.rows) .then(response = ( this.info = response.data, this.total = this.info.total, this.totalPage = this.info.tota

    2024年04月16日
    浏览(65)
  • Qt项目UI文件中新添加的控件在代码中不识别的问题

    ui-XXXX 在UI界面中新添加了控件,但是在代码中怎么也不出现,或者划红线 我看不少人说备份删除文件再添加,或者关闭QT再打开。。。 其实只要右键项目清除构建,然后重新构建就可以了, 这有一个大哥写的也很明白,感觉好的办法被海一样的信息淹没了,也帮他给个链接

    2024年02月16日
    浏览(41)
  • 前端项目review之修改element-ui全局主题颜色配置element-theme-chalk和gulp

    每个公司的主题风格肯定是不一样的,比如现在的公司主题就是#00ab7a。在PC端TO-B的项目中少不了用 element-ui ,这个时候用 element-theme-chalk 直接本地编译修改了element全局的主题色。 执行 当只有一个主题不需要切换的时候,使用 element-theme-chalk 就足够了,但是当主题很多的时候

    2023年04月09日
    浏览(40)
  • metaRTC7集成lvgl ui demo编译指南

    开源轻量级嵌入式图形库lvgl:Light and Versatile Graphics Library,最低只需8kb内存,可为任何 MCU、MPU 和显示类型创建漂亮的 UI。 metaRTC新增lvgl demo,可在linux下编译运行。 https://github.com/metartc/metaRTC/releases/tag/7.0.050 https://github.com/metartc/metaRTC/releases/tag/7.0.050 https://gitee.com/metartc/metaRT

    2024年02月07日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包