TinyUI组件开发示例

TinyUI实际上并不是一个具体的UI展现组件,它只是一个UI构建体系。它可以适应于各种Html+CSS+JS的体系架构中。 TinyUI主要解决下面的问题:

  • UI中JS的引入与顺序,JS合并的问题
  • UI中css的引入与顺序,CSS合并的问题
  • UI中碰到性能问题时的影响范围,比如:一个树出现问题,要改动许多用到树的地方
  • 代码重复的问题,同样的内容在许多地方都有,如果要改动就要改动许多个地方
  • 整体布局调整困难的问题
  • 开发效率的问题
  • 执行效率的问题,前台响应要求速度更快
  • 集群的问题
  • 国际化的问题
  • 等等

所以,它只是一个体系,不提供具体的UI组件,只是便于进行对其它UI框架进行包装、集成,同时解决运行过程中的各种问题。它还解决了模块化的问题,也就是说大家都按照规范构建一个一个的模块,然后复用的时候,是不用考虑如何引入css,js以及其引入顺序的相关问题的。   关于体系性的说明,请移步查阅UI开发的终极方案。 
下面我们就以集成Jquery和Jqueryui来示例,如何进行TinyUI组件包的开发。 
JQuery TinyUI组件包的的开发

  • 新建一个Maven的Jar类型工程
  • 在main/resources/中创建jquery/js目录,然后在/jquery/js/目录中放入jquery-1.11.0.js文件
  • 在main/resources目录中创建jquery.ui.xml,文件内容如下
1
2
3
4
5
<ui-components>
    <ui-component name="jquery">
        <js-resource>/jquery/js/jquery-1.11.0.js</js-resource>
    </ui-component>
< /ui-components>

OK,JQuery的UI组件包就算开发完毕了。 
简单说明:其实上面的文件组织形式,只是个示例而已,实际上你也可以根据你自己的需要制订自己的规范,来进行目录的组织,唯一需要注意的是js-resource中的jquery-1.11.0.js所在的路径,以/resources为根开始要正确引用。

JQueryUI TinyUI组件包的的开发

  • 新建一个Maven的Jar类型工程,并依赖上面创建的jquery工程
  • 在main/resources/中创建jqueryui/js目录,然后在/jqueryui/js/目录中放入jquery-1.11.0.js文件
  • 在main/resource/jqueryui/中创建theme目录,里面放jqueryui的所有主题文件夹
  • 在main/resources目录中创建jqueryui.ui.xml,文件内容如下
1
2
3
4
5
<ui-components>
    <ui-component name="jqueryui" dependencies="jquery">
        <js-resource>/jqueryui/js/jquery-ui-1.10.3.custom.js</js-resource>
    </ui-component>
< /ui-components>

OK,JQueryUI的UI组件包就算基本开发完毕了。 
解释一下与做JQuery工程时的差异,为什么要在pom中依赖上面创建的jquery工程呢??原因是JQueryUI的运行需要用于JQuery运行库。 
为什么已经在pom中依赖jquery包,还要在ui-component一行中要增加dependencies="jquery"属性呢?? 
因为Pom依赖解决的问题是如果要用JQueryUI,则必须要有JQuery的运行库。 
但是有了运行库之后呢,JS的引入是有先后顺序的。这个时候,TinyUI框架就无法知道把哪个js引入在前面,但是有了dependencies="jquery"属性,TinyUI框架就知道,哦,jqueryui只能在jquery之后引用。 
为什么上面有个说法叫基本完成呢?就是说,现在确实可以算做已经完成,但是程序员在写代码的时候还是要对JQueryUI进行深入学习,然后编写时的写法与原来没有什么本质的区别,这当然不是TinyUI框架解决问题的终点。 
有没有办法,让不懂JQueryUI的人也可以简单的使用JQueryUI?当然可以,请看下节,创建界面组件定义文件。 
TinyUI组件的定义 在jqueryui工程的/resources目录中创建component目录,然后中其中创建jquery_ui.component文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
##==================================================================================
## jqueryUI Dialog
##==================================================================================
#*
参数
id:ID
title:标题
construct:构建参数,详细参见jqueryui手册
*#
#macro(jui_dialog $id $title $construct)
< div id="$id" title="$!title">
    $!bodyContent
< /div>
< script>
    $(function() {
        $( "#$!id").dialog($!construct);
    });
< /script>
#end
##=================================================================================

如上,定义了一个宏,名字叫jui_dialog,它有两个参数,一个是标题,一个是构建参数。 
采用的语法是Velocity语法--因为内部就是集成了Velocity模板语言的。 
以后的人开发的时候,使用就非常简单了,只要输入下面的内容:

1
2
3
#@jui_dialog("窗口标题")
这里放内容
#end

就可以直接使用JQueryUI的Dialog来显示一个对话框了。 
当然,你也可以定义更多的宏,比如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
##==================================================================================
## jquery accordion,参数:ID,构建参数
##==================================================================================
#macro(jui_accordion $id $construct) 
< div id="$id">
$!bodyContent
< /div>
< script>
$(function() {
    $( "#$id" ).accordion($construct);
});
< /script>
#end
##==================================================================================

##==================================================================================
##by 罗果 jquery accordion section,参数:标题
##==================================================================================
#macro(jui_accordionSection $title)
   <h3>$!title</h3>
    <div>
       $!bodyContent
    </div>
#end
##==================================================================================

然后就可以在编写界面的时候用下面的方式来构建一个抽屉效果了:

1
2
3
4
5
6
7
8
9
10
11
#@jui_accordion("abc")
  #@jui_accordionSection("第一个抽屉")
    第一个抽屉的内容
  #end
  #@jui_accordionSection("第二个抽屉")
    第二个抽屉的内容
  #end
  #@jui_accordionSection("第二个抽屉")
    第二个抽屉的内容
  #end
#end

通过上面的处理,就可以在很大程度上屏蔽开发人员对具体的UI开发框架的依赖,而是在别人研究之后的基础上,像调用函数一下,就可以方便的来构建界面应用了。   TinyUI界面的开发 TinyUI的界面开发,有两种文件格式,一种以.page结尾,一种以.layout结尾  
.page文件表示是用来展现的一个页面文件,.layout文件表示是一个布局文件,它自己不能被单独用来展示,但是可以进行布局定义,并影响.page文件的展现效果。干巴巴的说,比较晦涩,还是用例子来进行演示:

  • 新建一个jar类型的maven工程
  • 在main/resources/目录中创建下面的目录结构目录,
1
2
main/resources/demo/a
main/resources/demo/b

也就是说在main/resources上创建demo目录,然后在demo目录中分别创建a和b两个子目录 
在demo目录中创建default.layout文件,内容如下:

1
2
3
<h3>这里是Header</h3>
$pageContent
< h3>这里是Footer</h3>

然后在a目录中创建一个a.page,内容如下:

1 我是a

在b目录中创建一个 b.page,内容如下:

1 我是b

在执行的时候,浏览器中输入http://localhost:8080/sample1/demo/a.page 
它的运行结果是:

1
2
3
<h3>这里是Header</h3>
我是a
< h3>这里是Footer</h3>

在执行的时候,浏览器中输入http://localhost:8080/sample1/demo/b.page 
它的运行结果是:

1
2
3
<h3>这里是Header</h3>
我是b
< h3>这里是Footer</h3>

看起来,布局文件确实已经起效果了。 
   一些特殊用法 用法1:个性化,从上面的例子中,可以看到布局文件会对当前文件夹中的所有文件起作用。但是在特殊场景下,确实有想不一样的情况出现,这时有两个办法:一个是把不一样的从当前目录中分离出去,另外一个是创建一个同名的布局文件。   比如,在上面的例子中,在demo目录中创建一个a.layout文件,其内容是如下:

1
2
3
<h3>This is Header</h3>
$pageContent
< h3>This is Footer</h3>

在执行的时候,浏览器中输入http://localhost:8080/sample1/demo/a.page 
它的运行结果就会变成:

1
2
3
<h3>This is Header</h3>
我是a
< h3>This is Footer</h3>

用法2:Ajax支持: 
比如,用Ajax进行局部加载的时候,不期望进行布局加载,只想这个page文件有啥就出啥,否则就会导致重复渲染的情况。TinyUI框架对此也有良好支持,只要请求的时候,在page后面加个let即可: 
http://localhost:8080/sample1/demo/a.pagelet 
这个时候它出来的内容都只有:

1 我是a

用法3:国际化支持   如果我想中国人访问,显示“我是a”,美国人访问,显示"I am a",怎么办呢? 
创建a.zh_CN.page内容是“我是a” 
创建a.en_US.page内容是 “I am a” 
同理,布局文件也支持同样的国际化规则支持。 
当然这个适合于两个页面结构及内容大相径庭的情况。 
如果只是利用国际化资源进行简单的国际化内容支持 
比如,有个国际国资源key值是title,那只要简单的写成#i("title")即可。 
总结: TinyUI是一个UI构建体系,但它不是一个具体的UI框架,因此它里面没有JS,没有CSS,也没有HTML,它只是提供了集成各种UI展现框架的能力,并提供了UI组件包的组织形式。并解决JS,CSS引入顺序、合并、压缩、国际化等问题。 
上面只演示了部分的特性,更多的请参阅相关文档或下载后直接试用。

时间: 2024-11-08 02:59:08

TinyUI组件开发示例的相关文章

[转]详解C#组件开发的来龙去脉

C#组件开发首先要了解组件的功能,以及组件为什么会存在.在Visual Studio .NET环境下,将会有新形式的C#组件开发. 组件的功能 微软即将发布的 Visual Studio .NET 将使程序开发人员获得一个集成开发环境,它不但为开发传统的 C/C++ 应用程序,而且也为令人振奋的Microsoft .NET 组件提供了丰富的工具.这些以管理代码编写.在通用语言运行时构建的组件向开发人员提供了一个全新的混合开发环境,即象 Microsoft Visual Basic 一样容易,而同

饿了么基于Vue2.0的通用组件开发之路(分享会记录)

Element:一套通用组件库的开发之路 Element 是由饿了么UED设计.饿了么大前端开发的一套基于 Vue 2.0 的桌面端组件库.今天我们要分享的就是开发 Element 的一些心得. 官网:http://element.eleme.io/#/github:https://github.com/ElemeFE/element ## 设计目的 大部分项目起源都是源于业务方的需求,Element 也是一样.随着公司业务发展,内部开始衍生出很多后台系统,UED 部门也接到越来越多的设计需求,

Flex自定义组件开发之日周月日期选择日历控件

原文:Flex自定义组件开发之日周月日期选择日历控件 使用过DateField的我们都知道,DateField 控件是用于显示日期的文本字段,字段右侧带有日历图标.当用户在控件边框内的任一位置单击时,将弹出一个 DateChooser 控件,显示当月的所有日期.如果未选择日期,则该文本字段为空白,并且 DateChooser 控件中将显示当前日期的月份.当 DateChooser 控件处于打开状态时,用户可以在各个月份和年份之间滚动,并选择某个日期.选择日期后,DateChooser 控件关闭,

使用jQuery进行组件开发(完整例子)

使用jQuery进行组件开发和使用纯JavaScript脚本(不使用框架)原理基本类似,特别是公共方法的组织是一样的. 不同点是,jQuery使用了插件机制,通过$()直接进行操作对象(DOM元素)绑定,然后对DOM元素或HTML代码进行绑定事件等的操作. 另一个不同点则是把jQuery当做工具来使用,用来创建DOM对象,快速查找指定DOM对象等. 例子测试通过. 初级简单示例,只实现了增加页和选择页功能. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML

汉王云名片识别(SM)组件开发详解

大家好,最近在DeviceOne平台上做了一个汉王云名片识别的功能组件.下面把我开发过程给大家做一个分享,希望可以帮助到大家. 下面我把我的思路给大家讲解一下. 1.找到我要集成的sdk,也就是汉王云名片的sdk下载(android和ios)和文档下载. 2.阅读sdk的官方demo 3.在deviceone上面创建组件 4.编写组件的属性.事件.方法. 5.下载组件的项目 6.编码 7.上传zip包 8.编写示例进行调试 9.完成. 下面我就按照上面的顺序来依次讲解. 1.找到我要集成的sdk

iStylePDF c#集成开发示例

iStylePDF安装包自带了ActiveX控件,下载安装包安装之后就可以使用,如果没有安装包请到360软件管家或者腾讯软件管家搜索下载.C#的Form中集成ActiveX控件还是非常简单的,选择添加COM组件,查看iStylePDFclass控件.拖入到Form中即可. iStylePDF提供了丰富的接口来控制PDF的显示,接口的调用也是非常的简单,类似VBA模式,只需要点点点即可.比如隐藏菜单条.代码如下: 整体调用结果如下: 菜单栏和工具栏的控制代码如下: 如需要更多示例源代码,请咨询QQ

EXTJS 组件开发(完整例子)

目标:EXTJS组件开发,从component基础实现一个TAB控件. 使用EXTJS版本为5.0.测试通过. 这个例子还很初级,仅仅是说明通过示例使用EXTJS进行组件开发的一个基本思路. <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>EXT JS TEST</title>

ASP.NET 3.5控件和组件开发技术之客户端回发/回调揭密

本文摘录自<纵向切入ASP.NET 3.5控件和组件开发技术>. 对于服务端控件元素,比如ASP.NET的Button标准服务端控件在提交时可以自动把请求发送到服务端处理,这样的控件我们不用自己处理它们的事件回发:但对于呈现不引起回发的HTML元素,如“文本框”(TextBox)或“链接按钮”(LinkButton),而希望由控件启动回发,则可以在ASP.NET中通过依靠客户端脚本的事件结构进行编程来实现这一功能.    完整地处理一个事件则还需要回发和捕捉.捕捉是IPostBackEvent

《纵向切入ASP.NET 3.5控件和组件开发技术》笔记:高效率事件集合对象

在之前讲的几个例子中,使用的是最普通的定义事件方法,比如KingTextBox中事件是这样定义的:/// <summary>/// 获得本书更多内容,请看:/// http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx/// </summary>public event EventHandler TextChanged;protected virtual void OnTextChanged(EventArgs