010-WebBuilder-编写可复用模块+阶段实战效果与代码

article/2025/9/13 11:25:51

编写可复用模块

可复用的模块是指某个模块可以作为公共模块应用到其它模块中,开发大型项目时,构建高度可复用的模块,对质量和系统的可维护性具有重要意义.
WebBuilder具有很强的模块复用能力,构建的模块可通过多种方式被别的模块引用.引用的模块和被引用的模块可以相互访问,使之成为一个有机的整体.

通过importModules属性引用模块

	在模块文件的根节点module中有importModules属性,该属性用于引用单个或者多个模块.在IDE中可以把引用的模块直接拖到该属性中,以把被引用模块的地址设置到该属性.通过上述方法引用模块后,被引用的模块即可在主模块运行时**同步被运行**.使用该方法引用的模块通常**仅用于运行公共的后台代码或引用公共的后台办法.**

下面举例说明如何通过设置importModules属性引用模块.
定义被引用的模块sub.xml,并在module的ServerScript属性中编写代码

Wb.apply(app, {//定义add方法,并添加到服务器端app变量中add:function(var val1, var val2){return val1+val2;}
});

定义主模块main.xwl,并把sub.swl文件拖到module的Modules属性中.
在main.xwl模块module的ServerScript属性中即可引用sub.xwl中定义的add方法:

var val = app.add(3, 5);//app.add方法在sub.xwl中定义
app.info(Wb.encode(val));//输出到浏览器控制台

效果如下
在这里插入图片描述

通过xwl控件引用模块

xwl控件位于控件箱[Server]目录下.相比通过使用importModules属性引用模块,使用xwl控件引用模块更灵活,具体优点主要表现在:
- 可以控制被引用模块和其他服务器控件执行的先后顺序,只有当解析到xwl控件对应的模块时才被执行.
- 除了访问服务端app,也可以访问客户端app,通过类似app.xwl1方法(xwl1是xwl控件itemId)即可访问到被引用模块客户端app对象.
- ** 可以把被引用模块作为子控件,添加到主模块的容器控件或其他控件(我就是用的这一种)**
下面举例说明如何通过xwl控件引用模块:
定义被引用的模块sub.xwl, 并添加到panel1控件,然后再module的initialize属性编写代码:

Wb.apply(app, {//定义setTitle方法,并添加到客户端app变量中setTitle:function(title){app.panel1.setTitle(title);}
});

定义主模块main.xwl,在main.xwl模块中添加viewport1控件,设置layout属性为fit.在viewport1下添加xwl控件,并在viewport1控件的afterrender事件中编写代码:
app.xwl1.setTitle(‘my panel’);//调用sub.xwl模块定义在app内的setTitle()方法
//通过app.xwl1.panel1.setTitle(‘my panel’);也可以设置标题
使用xwl控件同样能完成服务器端公共方法的引用,具体可以参照上述[通过importModules属性引用模块]的方法说明.
效果如下:
在这里插入图片描述

通过API方法引用模块

通过代码的方法也可以引用或运行模块。

在前台引用模块

在客户端JavaScript中可以使用Web.run或者Wb.open方法运行模块,并获取模块的appScope对象。例如如下的JS代码:

Wb.run({url: 'm?xwl=my-module',success:function(scope){app.window1.add(scope._myPanel);//把my-module模块的myPanel对象添加到当前魔魁啊的window对象中}
});

Wb.run方法好像已经没有了,我现在就是报错
TypeError: Wb.run is not a function

在后台引用模块

在Java中可以使用WbUtil.run方法,在ServerScript中还可以使用app.execute方法。例如以下ServerScript代码:

//在模块中运行另一个模块,主模块和子模块将共享requst和response
app.execute('m?xwl=examples/basic/coding/modules1');
//使用虚拟的response作为参数运行模块,并获得模块运行所得的闭包部分脚本
var script=app.execute('m?xwl=examples/basic/coding/modules1',{foo:'bar',//设置参数,在module1中可通过app.get获取参数abc:123
}, true//true表示获取运行模块后返回客户端闭包部分脚本
//在独立的上下文以及虚拟的request/response上运行模块文件
Wb.execute('m?xwl=examples/basic/coding/modules1');
);

在Java中使用WbUtil.run方法可以运行或引用xwl文件。

实战

预期效果

在这里插入图片描述

最终效果

在这里插入图片描述
我只做上面部分

过程

界面布局参考实例模块,基础模块中的联合模块使用border,分west,center,east
静态页面绘制直接采用CSS+HTML
数据库数据获取采用Wb.request
脚本采用JavaScript

结构

在这里插入图片描述

viewport

在这里插入图片描述

panel1

也就是html代码

<!DOCTYPE html>
<html> <head><meta charset="utf-8" /><title>业务种类</title><style>.left-list-container{      flex:1float: left;/*float规定框是否应该浮动,left设置定位元素左外边距边界与其包含块左外边界之间的偏移*/
/*         padding-left:200px; */}.left-list-title{margin-bottom: 20px;/*定义元素外边距使用margin属性,可以专门设置某一方向属性,比如margin-bottom:设置元素的下外边距*/}.left-list-header{font-size: 25px;/*字体大小*/color: rgb(16,120,173); /*定义内边距使用padding属性,内边距就是元素包含的内容和元素边框内边沿之间的距离*/padding-left: 8px;/*边框border:任何元素都可以定义边框,并且能够很好地显示出来。边框在网页布局中就是用来分割模块的。*/border-left: 5px solid rgb(16,120,173);}.left-list-footer{font-size: 14px;color: rgb(255,203,0);padding-left: 8px;/*padding是内边距,设置内边距这样我们就有空间可以设置border边框了, soild一个实体边框*/border-left: 5px solid rgb(255,203,0);}.left-list-content{
flex: 1;/*让所有弹性盒子对象的子元素都有相同的长度,且忽略他们内部的内容*/width: 200px;/*元素区域宽度*/background-color: rgb(247,247,247);/*背景色*/padding: 0 5px;border: 1px solid rgb(247,247,247);/*定义边框,只要和背景色一样就看不出来*/}.left-list-item{display: flex;/*利用display属性控制盒子的类型,flex:多行多列布局方式*/align-items: center;/*元素位于容器的中心,这个没啥用*/font-size: 16px;/*字体大小*/line-height: 20px;/*line-height行高,用来设置行间的距离*/padding: 10px 0;/*上下填充是10px,左右填充是0, 行间距和padding的上下填充感觉重复*/border-bottom: 1px solid rgb(247,247,247);/*定义底部边框,只要背景色一样就看不出来*/}.left-list-item:nth-last-child(1){/*nth-last-child是从最后一个元素开始计算选择特定元素*/border-bottom: 0px solid rgb(247,247,247);}.left-list-icon{/*设置图标大小*/height: 20 px;width: 20 px;}.left-list-content {flex: 1;border: 0px solid rgb(237,237,237);}</style></head><body><div class="left-list-container"><div class="left-list-title"><div class="left-list-header">业务种类</div><div class="left-list-footer">Business Type</div></div><ul class="left-list-content"><li class="left-list-item"><img src="wb/images/left.jpg" class="left-list-icon"><span class="left-list-content">出入境体检</span></li><li class="left-list-item"><img src="wb/images/left.jpg" class="left-list-icon"><span class="left-list-content">预防接种</span></li><li class="left-list-item"><img src="wb/images/left.jpg" class="left-list-icon"><span class="left-list-content">指定签证体检</span></li><li class="left-list-item"><img src="wb/images/left.jpg" class="left-list-icon"><span class="left-list-content">社会健康体检</span></li><li class="left-list-item"><img src="wb/images/left.jpg" class="left-list-icon"><span class="left-list-content">其他服务</span></li></ul></div></body>
</html>

panel3

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>Title</title><style>.top-list-container {flex:1float: right;
/*         padding-right:300px; */}.top-list-title {margin-bottom: 20px;}.top-list-header {font-size: 25px;color: rgb(25,108,144);padding-left: 8px;border-left: 5px solid rgb(25,108,144);}.top-list-footer {font-size: 14px;color: rgb(252,204,21);padding-left: 8px;border-left: 5px solid rgb(252,204,21);}.top-list-content {flex:1;width: 200px;background-color: rgb(246,247,247);padding: 0 5px;border: 1px solid rgb(237,237,237);}.top-list-item {display: flex;align-items: center;font-size: 16px;line-height: 20px;padding: 10px 0;border-bottom: 1px solid rgb(237,237,237);}.top-list-item:nth-last-child(1) {border-bottom: 0px solid rgb(237,237,237);}.top-list-icon {height: 20px;width: 20px;}.top-list-content {flex: 1;border: 0px solid rgb(237,237,237);}</style></head><body><div class="top-list-container"><div class="top-list-title"><div class="top-list-header">业务指南</div><div class="top-list-footer">Business Guide</div></div><ul class="top-list-content"><li class="top-list-item"><img src="wb/images/体检流程.jpg" class="top-list-icon"><span class="top-list-content">体检流程</span></li><li class="top-list-item"><img src="wb/images/体检注意事项.jpg" class="top-list-icon"><span class="top-list-content">体检注意事项</span></li><li class="top-list-item"><img src="wb/images/体检结果领取须知.jpg" class="top-list-icon"><span class="top-list-content">体检结果领取须知</span></li><li class="top-list-item"><img src="wb/images/收费标准.jpg" class="top-list-icon"><span class="top-list-content">收费标准</span></li><li class="top-list-item"><img src="wb/images/办公时间.jpg" class="top-list-icon"><span class="top-list-content">办公时间</span></li><li class="top-list-item"><img src="wb/images/预防接种须知.jpg" class="top-list-icon"><span class="top-list-content">预防接种须知</span></li></ul></div></body>
</html>

panel2

采用xwl引用模式,因此需要将JS在afterrender中编写

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script><style>.center-list-container{float:center;padding:10px;}.center-list-title{margin-bottom:20px;}.center-list-header{font-size:20px;color: rgb(170,177,196);padding-bottom:8px;border-bottom:5px solid rgb(16,120,173);float:left;width:20%;height:50px;}.center-list-footer{font-size:20px;color: rgb(170,177,196);padding-bottom:20px;border-bottom:5px solid rgb(170,177,196);float:left;width:80%;height:50px;}.center-list-item-1{display:flex;align-items:center;font-size:16px;line-height:20px;padding:10px 0;border-bottom: 1px solid rgb(237,237,237);float:left;font-size:16px;
/*         padding-left:100px */}.center-list-item-2{display:flex;align-items:center;font-size:16px;line-height:20px;padding:10px 0;border-bottom: 1px solid rgb(237,237,237);float:left;font-size:16px;padding-left:700px}.center-list-content{}</style></head><body><div class="center-list-container"><div class="center-list-title"><div class="center-list-header">业务指南</div><div class="center-list-footer"></div><p><p><p><p><div class="center-list-content" id="tableList"> <table class="table"><tbody></tbody></table></div></div></div></body>
</html>

afterrender如下

  Wb.request({url: 'm?xwl=demo/combine-module/basic_select',//成功后的回调函数success: function(resp) {console.log("success");var obj = Wb.decode(resp.responseText);var data = obj.rows;var html = '';var tbody = document.getElementsByTagName('tbody')[0];for (var i = 0; i < data.length; i++) {var tr = document.createElement('ul');var tdTitle = document.createElement('li');var tdAuthor = document.createElement('li');var tdTitleType = document.createAttribute("class");var tdAuthorType = document.createAttribute("class");var trType = document.createAttribute("class");var img = document.createElement("img");var imgType = document.createAttribute("src");var news = data[i];var title = news.title;var author = news.author;var spanTitle = document.createElement('span');spanTitle.innerHTML=title;var spanAuthor = document.createElement('span');spanAuthor.innerHTML=author;img.src="wb/images/new符号.png";
//         img.attributes.setNamedItem(imgType);tr.nodeValue="center-list-content";tr.attributes.setNamedItem(trType);tdTitleType.nodeValue = "center-list-item-1";tdAuthorType.nodeValue = "center-list-item-2";tdTitle.attributes.setNamedItem(tdTitleType);tdAuthor.attributes.setNamedItem(tdAuthorType);tdTitle.appendChild(spanTitle);tdTitle.appendChild(img);tdAuthor.appendChild(spanAuthor);var cellpadding = document.createAttribute("cellpadding");cellpadding.nodeValue="50px";//td.attributes.setNamedItem(cellpadding);// tdTitle.innerHTML=title;tr.appendChild(tdTitle);//tdAuthor.innerHTML=author;tr.appendChild(tdAuthor);tbody.appendChild(tr);}},error: function(res) {console.log("失败");}});

http://chatgpt.dhexx.cn/article/iGTovFLq.shtml

相关文章

webbuilder mysql_快速开发平台 WebBuilder 8 的 安装

WebBuilder是一款强大&#xff0c;全面和高效的应用开发和运行平台。基于浏览器的集成开发环境&#xff0c;可视化和智能化的设计&#xff0c;能轻松完成常规应用和面向手机的移动应用开发。包含多项先进技术&#xff0c;使应用系统的开发更快捷和简单。 运行环境和系统安装 We…

005-webbuilder应用-访问数据库-basic-dialog-edit

访问数据库的方式 WebBuilder默认提供基于JDBC的数据库访问控件和APi来访问数据库&#xff0c;具有灵活的访问方式和高效的性能。这些控件和API提供了从运行SQL&#xff0c;获取数据到自动生成指定类型的脚本等一系列操作。 使用数据库访问控件 数据库访问控件默认位于控件箱…

002-webBuilder的HelloWorld应用与表格应用

Hello World应用 依照惯例&#xff0c;还是helloWorld 打开集成开发环境 主界面选择【开发套件】->【集成开发环境】或者直接输入[url/ide]打开 添加Hello World模块 1. 创建目录 点击左侧文件列表中的【模块】节点&#xff0c;点击顶部工作条【添加目录】按钮或者直…

强大的快速开发平台WebBuilder(简称WB)

WebBuilder是一款强大&#xff0c;全面和高效的应用开发和运行平台。基于浏览器的集成开发环境&#xff0c;可视化和智能化的设计&#xff0c;能轻松完成常规应用和面向手机的移动应用开发。包含多项先进技术&#xff0c;使应用系统的开发更快捷和简单。 WB集成开发环境 wb的…

Web快速开发平台

Putdb WebBuilder 官网&#xff1a; http://www.putdb.com WebBuilder是一款开源的跨平台、数据库和浏览器的可视化Web应用开发平台。WebBuilder使用了多项最新的技术&#xff0c;使Web应用的开发更快捷和简单。作为一款高效的Web开发工具&#xff0c;WebBuilder的特色是&#…

PTX JIT complied failed

记录一下我遇到的问题。 我在安装cupy运行的时候出现这个问题&#xff1b; 我运行的环境是Ubuntu&#xff0c;由于同时装了cuda9.0和cuda10.0&#xff0c;导致cupy安装出现了问题。 首先 import cupy as cp print(cp.show_config())结果 如果这里CUDA同时有9.0和10.0可能就会出…

Please check CUDA_ARCH_PTX or CUDA_ARCH_BIN in your build configuration错误解决

在RTX2060显卡的机器上&#xff0c;编译了cuda opencv4.4没有报错&#xff0c;但是使用gpu就报错&#xff0c;报错如下&#xff1a; classes, confidences, boxes net.detect(image, confThreshold, nmsThreshold) cv2.error: OpenCV(4.4.0) /home/ycc/opencv-4.4.0/modules/…

PTX-TK-PEG-NH2 紫杉醇-酮缩硫醇-聚乙二醇-氨基的制备

今日瑞禧生物小编给大家整理分享一种PLGA-SS-PEG-Cur 聚丙交酯乙交酯共聚物-双硫键-聚乙二醇-姜黄素的应用。 紫杉醇分子式为C47H51NO14&#xff0c;在临床上应用广。紫杉醇作为一个二萜生物碱类化合物&#xff0c;具有新颖复杂的化学结构、显著的生物活性、全新独特的作用机制…

CUDA PTX ISA阅读笔记(二)

8. 第八章 指令集 这一章占了整个手册的一大半(百十来页吧)&#xff0c;主要介绍各种指令&#xff0c;虽然页数很多&#xff0c;但是大多数指令都很简单。 8.1. 指令的形式和语义描述 这章就是主要描述每个PTX指令。除了指令的形式和语义之外还有一些例子来描述这些指令的使…

CUDA(19)之PTX优化原理

摘要 本文主要讲述CUDA中的PTX的原理实现和分析。 1. 不作优化的代码实现 Nvidia GTX 1050, CUDA 8.0测试代码如下&#xff1a; #include "cuda_runtime.h" #include "device_launch_parameters.h"#include <stdio.h>__global__ void gpu(int *d_…

Cy5/FITC/CY3/CY7-Nab-PTX ,荧光标记白蛋白结合型紫杉醇

Cy5 (Cyanine 5) 是一种发远红(far-red)荧光的花青素荧光染料&#xff0c;分为普通Cy5和磺化Cy5(Sulfo-Cy5)。它的消光系数很高&#xff0c;荧光很亮&#xff0c;并且对pH不敏感&#xff0c;一般可以用633 nm或647 nm的激光束激发然后用 Cy5或APC滤片观察&#xff0c;所以在绝大…

vs进行cuda编程失败,报错“the provided PTX was compiled with an unsupported toolchain.”

这表明提供的PTX是使用不受支持的工具链编译的。最常见的原因是PTX是由比CUDA驱动程序和PTX JIT编译器支持的编译器更新的编译器生成的。 解决&#xff1a;更新显卡驱动。 更新方法&#xff1a; 1.进入英伟达官网页面&#xff0c;网址https://www.nvidia.cn/Download/index.asp…

arduino笔记33:nRF24l01模块使用 FSK 波特率 通信方式 PTX PRX

最近再arduino中文社区看到了一篇介绍nrf24l01基本原理的帖子&#xff0c;内容感觉蛮不错的&#xff0c;学习一下&#xff0c;记录一下学习笔记。 大部分内容都是Arduino中文社区的帖子&#xff0c;附上自己的一点点体会。 目录 一、数据传输 FSK&#xff08;Frequency Shi…

Internal: Invoking ptxas not supported on WindowsRelying on driver to perform ptx compilation.

原环境&#xff1a;Windows 10, gpu 3090, TF 1.15&#xff0c;cuda_10.0.130_411.31_win10&#xff0c;cuDNN 7.6.5.32 mask-rcnn框架&#xff0c;运行train.py报错信息如下&#xff1a; image_id 333 image_id 32 image_id 58 2022-01-01 19:03:07.415032: I tensorflow/str…

Matlab里.cu函数转ptx文件常见错误

错误类型&#xff1a; nvcc fatal : Cannot find compiler ‘cl.exe’ in PATHwarning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 &#xff1b;fatal error C1083: 无法打开包括文件: “mat.h”: No such file or di…

vs cuda c/c++ 生成ptx配置

在编译cu文件生成ptx文件 一&#xff1a;生成依赖项目 二&#xff1a;配置.cu属性&#xff0c;项目类型改为CUDA C/C 三&#xff1a;配置CUDA C/C属性 compiler output&#xff1a;输出的文件名&#xff1b; additional include directories: 包含库&#xff1b; nvcc compi…

the provided ptx was compiled with an unsupported toolchain

本人遇到这个问题的原因是&#xff0c;一个动态库在一个cuda驱动比较新的服务器上编译的&#xff0c;然后使用这个动态库&#xff0c;在cuda较老的驱动上运行 编译机器cuda版本信息 运行机器cuda版本信息

VS查看PTX代码

首先&#xff0c;声明本人用的是Windows 7操作系统&#xff0c;使用Windows 8操作系统的小伙伴们会启动不了Nsight monitor&#xff0c;原因在于Windows 8操作系统的Framework版本过新&#xff0c;解决办法可以是&#xff1a;安装一个版本旧一点的Matlab&#xff0c;安装起初会…

Nvidia Tensor Core-MMA PTX编程入门

目录 1 PTX (Parallel Thread Execution) 2 MMA (Matrix Multiply Accumulate) PTX 3 LDMATRIX PTX 4 示例 5 底层代码 6 其他 6.1 HGEMM优化 1 PTX (Parallel Thread Execution) PTX是什么&#xff0c;Nvidia官方描述为a low-level parallel thread execution virtual…

PTX ISA 7.4 参考手册翻译

文章目录 PTX Parallel Thread Execution ISA 7.4SynataxSource FormatCommentsStatementsinstruction identifiersInteger ConstantFloat-Point ConstantConstant expression整型常量表达式求值 State Spaces, Types, and Variables状态空间Kernel Function ParametersKernel …