简介:
SUI不是一类UI的实现,也不是一套标准的UI标记语言,它只是帮助既有的UI框架(比如Ext、YUI之类)以标记的方式来声明和创建UI。这些标记的名称、属性、与及值都是可自定义的,因此你需要针对特定框架来编写一套转换机制来将标记的声明转换成创建这些UI所需要的参数,但通常情况下,不需要为这种转换做很多工作,因为SUI会以一种简单而实用的约定来实现这种转换,另外SUI的约定是非强制的,因此也可以针对特例实现自己的转换。
一、SUI的目标或者说特点
1、以标记声明来表示界面构造,好处很多:形象、编辑方便、节省代码量...
2、支持一般形式节点和指定命令空间的节点作为渲染目标,如<div sui="panel"><div><ui:panel></ui:panel>
3、标记声明和具体渲染程序间通过配置来关联,即同一个标记可以由不同的框架、不同的版本来渲染。但由于各种UI框架的API并不一样,因此不能像普通的HTML UI标记那样,一种UI在各个浏览器间使用一样的标记(实现情况也不是100%完全一样),但由于SUI是松耦合的,因此是支持标准标记的,你可以自己制定一套或者等待哪天它出现。
4、SUI默认使用JSI来导入JS,也就是说你无须再为命名冲突和该什么情况下导入哪些js文件烦恼了
5、支持多种UI框架组件组成的复杂界面,你可以在Ext的panel里放YUI的canlendar,也可以在YUI的panel里放jquery的maskinput
6、支持以配置节点的方式声明复杂组件的子部件,可以像asp.net那样声明grid
7、支持在配置文件里为某一种UI或某个渲染器渲染的该种UI设定默认的属性,这样的好处是可以减少在html页面里的代码量,也可以达到在一个地方修改,整个程序都改变的目的。但这个默认设置的优先级是最低的,因此页面中的设置或者适配器中的设置可以覆盖它。
8、支持以平常的方式声明事件触发时执行的代码,如<ui:button onclick="alert('hello sui')" ></ui:button>,但不推荐采用此种方式。
9、计划支持浏览器支持设定(目前在配置文件里可以设置,但尚未实现)。也就是说当某种ui:tagname在配置文件里的默认渲染器不支持当前浏览器的情况下,会查找其他支持的实现来渲染。
10、SUI支持主流的浏览器,我在Window下的以下浏览器测试过,IE6 IE7 FirefoxV3.0.5 OperaV9.6.3 Google-Chrome V1.0 Safari V3.2.1,Linux的FirefoxV3.0.5 OperaV9.6.3 测试过
二、布署与运行
1、下载SUI
svn checkout http://sui.googlecode.com/svn/trunk/ sui-read-only
2、下载Ext v2.1
下载Ext并解压到javascripts/org/ext/v2_1目录下
3、把SUI放到Tomcat或者IIS的web程序目录里,并把index.html设为默认页面
4、浏览index.html页面,点击!Render按钮运行
三、SUI是如何工作的
1、初始化指定渲染区域,为UI:tagname标记DOM对象扩展一些方法,使得可以监听该标记被渲染前后的事件
2、以从根至叶的方式渲染指定区域,在父节点被渲染之前,子节点会从父节点移出,并送入渲染栈。父节点渲染后,必须返回一个实现SUI组件或容器组件接口的临时对象,当父节点的每一个子节点渲染后,调用父节点的对映临时对象的add方法添加子节点对映的临时对象
3、渲染单个节点:首先SUI会从ui:tagname的父节点移除它并压入栈,SUI从config.xml查找UI:tagname对应的渲染适配器程序,找到后调用该渲染适配器的载入器载入并实例化,然后注册到SUI的renderMap,以备同样类型的声明调用。开始渲染前SUI收集UI:tagname的声明并转换成一个{name:value}形式的声明对象,触发渲染前事件,调用渲染适配器,并传递声明对象给它,渲染适配器对声明对象进行转换,然后实例化一个具体框架(比如Ext)的UI组件并渲染它,渲染后返回一个实现SUI组件接口的临时对象,最后SUI触发渲染后事件,继续渲染其余节点
4、SUI如何载入js代码:SUI默认使用JSI
http://www.iteye.com/wiki/JSI载入自身代码及适配器代码,但也可以针对特定框架(比如YUI)实现SUI的loader接口来以自己的方式载入。
四、ExtUI标记示例及渲染结果
<body>
<input type="button" value="!Render" onclick="btnRender_click()"/>
<ui:panel id="p2" style='visibility:visible;' title="小面板" width="300" collapsible="true">
<ui:colorpalette visibility="visible" id='c1' render_name="Ext" render_version="2.1" disabled="false" notbool="~false" value="" intp="356" floatp="352.7" boolp="false" onchange="javascript:alert('i changed')"></ui:colorpalette>
</ui:panel>
<ui:button id="extButton" text="Click me!" onclick="alert('hello,sui')" ></ui:button>
<ui:panel id='p1' title="cool大面板" width="500" collapsible="true" oncollapse="pnl1_collapse(this)" >
<ui:slider id="suiSlider" width="200" min_value="0" value="50" max_value="100" increment="10"></ui:slider>
北京欢迎你!
<ui:datepicker id="d1" fieldLabel="Date of Birth1" name="dob2" width="190" allowBlank="true"></ui:datepicker>
<input type="text" />
</ui:panel>
<div sui="window" title="windows sui" layout="fit" width="500" x="100" auto_show="true" plain="true" height="300" close_action="hide" id="win2" >
<div>abc</div>
</div>
<ui:window id="suiWin" title="windows sui" layout="fit" width="500" x="100" auto_show="true" plain="true" height="300" close_action="hide" >
<ui:progressbar id="extProgressBar" width="200" height="20" value="0.35" text="uploading..." ></ui:progressbar>
</ui:window>
<ui:grid id="egrid" stripe_rows="true" auto_expand_column="company" height="150" width="600" title="array grid" >
<ui:configure>
<ui:columns>
<ui:column id="company" header="Company" width="160" sortable="true" data_index="company" ></ui:column>
</ui:columns>
</ui:configure>
</ui:grid>
<ui:form id="f1" label_align = "top" _dont_render_children="true" frame = "true" title = "Multi Column, Nested Layouts and Anchoring" body_style="padding:5px 5px 0" width="600">
<ui:configure>
<ui:items>
<ui:panel id="col1" layout="column" >
<ui:items>
<ui:panel layout="form" column_width="0.5" >
<ui:items>
<ui:textfield xtype="textfield" id="txtFname" field_label="First name" anchor='95%' name="first" ></ui:textfield>
<ui:textfield xtype="textfield" id="txtCompany" field_label="Company" anchor='95%' name="company" ></ui:textfield>
</ui:items>
</ui:panel>
<ui:panel layout="form" column_width="0.5" >
<ui:items>
<ui:textfield xtype="textfield" id="txtLname" field_label="Last name" anchor='95%' name="last" ></ui:textfield>
<ui:textfield xtype="textfield" id="txtEmail" field_label="Email" anchor='95%' name="email" vtype="email" ></ui:textfield>
</ui:items>
</ui:panel>
</ui:items>
</ui:panel>
<ui:htmleditor _dont_render="true" xtype="htmleditor" id="bio" height="200" anchor='98%' field_label="Biography"></ui:htmleditor>
</ui:items>
<ui:buttons id="f1btns" _dont_render="true">
<ui:button id="btnCancel" text="Cancel" ></ui:button>
<ui:button id="btnSave" text="Save" ></ui:button>
</ui:buttons>
</ui:configure>
</ui:form>
</body>
- 大小: 203.9 KB
分享到:
相关推荐
SUI-101A是一款集成度高、功能强大的智能传感器模块,广泛应用于工业自动化、物联网以及智能家居等领域。这款设备的核心在于其与单片机的高效交互,以及通过Modbus协议实现的数据通信。下面我们将围绕SUI-101A的使用...
《SUI-101A说明书及测量值读取程序》是针对一款名为SUI-101A的设备的详细指南,包含了该设备的接线、使用以及测量值读取的相关知识。在这个压缩包中,用户可以找到必要的文档和程序,以便更好地理解和操作SUI-101A。...
电流互感器是一种重要的电力设备,它在...总的来说,SUI-101A电流互感器配合STM32或C51微控制器,能提供一种高效、安全的电流测量方案。理解并掌握相关的硬件原理和软件编程,对于电力系统的监控和维护具有重要意义。
SUI-101A交流变送器模块资源 有以下资源 1、SUI-101A使用说明书2023/7/6 18:46文件夹 2、单片机读取SUI-101A测量值例程文件夹2023/7/6 18:46 3、电脑Modbus读写测试文件夹2023/7/6 18:46 4、外挂互感器接线说明(15A...
标题 "matlab开发-JavaScript 项目-vue-sui-demo.zip" 暗示这是一个结合了MATLAB和JavaScript技术的项目,具体来说是基于Vue.js框架和SUI Mobile UI库的示例应用。这个压缩包可能包含了一个完整的前端项目结构,用于...
在本项目"基于STM32的SUI-101A测量值读取程序"中,我们关注的是如何利用STM32F103RCT6型号的MCU来读取SUI-101A传感器模块提供的测量数据,包括交流电的电压、电流和有功功率。 首先,STM32F103RCT6是STM32系列的一...
通过这个“vue-sui-demo”项目,你可以学习到如何在Vue.js环境中集成第三方UI库,理解Vue的组件化开发思想,以及如何组织和管理一个完整的前端项目。同时,它也是一个很好的起点,可以帮助你掌握移动端开发的基本...
本文将深入探讨无线信道建模的基本原理,特别是SUI-3信道的MATLAB仿真。 无线信道的特征主要包括多径传播、移动台速度、物体运动以及信号带宽等因素。在无线传播过程中,信号会受到多种因素的影响,导致信号质量...
电流互感器是电力系统中不可或缺的设备,其主要作用是将高电压、大电流环境下的电流转换成可以安全测量的低电压小电流信号,而SUI-101A型号电流互感器是其中的佼佼者。这种设备广泛应用于各种工业、商业及住宅电力...
SUI-Mobile组件库 city-picker.js SUI-Mobile组件库 city-picker.js
(2016-07-11)Vue 量很轻,易定制,比较适合移动端,很喜欢 Vue 写组件的方式,全部用VUE和SUI-Mobile写了一个移动端 demo,用来反馈 vue 的学习效果(取消了 SUI 自带的路由) ,使用Vue-router)的节点 v5.12.0...
本文将针对"Sui-Mobile路由加载js,css问题的解决方案"进行详细的探讨。 首先,理解SUI Mobile的路由机制是解决问题的关键。SUI Mobile 并不是一个完整的前端框架,它不包含内置的路由管理功能。通常,开发者会结合...
总结,sui-button组件以其灵活的样式配置、强大的事件处理能力和良好的无障碍支持,成为了前端开发中的一种高效解决方案。理解并掌握它的设计与实现原理,将有助于我们更好地利用JavaScript构建用户友好的交互体验。...
matlab写的sui-3的信道仿真,802.16推荐下的仿真代码
将sui-theme导入到您的sui-component中,包括index.scss的路径: @import ' ~@s-ui/theme/lib/index ' ; 如果您想自定义您的组件,创建自己的主题,它只是隋主题导入前添加到您的组件。 @import ' ../custom-...
要使用SUI Mobile,首先需要从压缩包`SUI-Mobile-master`中解压获取源码。项目通常包含`dist`目录,里面包含了编译后的CSS和JS文件,可以直接引入到项目中。同时,`src`目录下的源码可供开发者进行二次开发或自定义...
本压缩包“SUI-JI-GONG-ZHENG.rar”包含的是关于随机共振的源代码,对于理解该技术的实现原理以及进行相关项目开发具有一定的参考价值。 随机共振的概念源于1960年代,最初是在研究非线性系统对微弱信号响应时提出...
本系统方案主要采用STM32 F407单片机作为系统主控,通过串口同SUI-101A电能计量模块进行通讯,获取有功功率、电压、电流等电参数,并通过这些参数进行用电器识别功能。其中SUI-101A模块通过电流互感器接入插座,监测...
sui-componentssui 组件库在线文档使用yarn add sui-components示例// libimport { Wrapper, Logo, Menu, RouterPage, Avatar} from 'sui-components';const { PageWrapper, LeftWrapper, RightWrapper, Header, ...
SUI-Mobile-dev 文件夹很可能是项目的开发版本,包含了源码、文档、示例等资源,便于开发者进行定制和扩展。在这里,你可以找到SUI Mobile的CSS和JS源文件,以及相关的开发工具,如Grunt或Gulp,用于自动化构建和...