- 浏览: 64369 次
- 性别:
- 来自: 杭州
最新评论
-
fxf-风翔飞:
j2eetop 写道fxf-风翔飞 写道这样的话配置项会不会太 ...
《开源框架那点事儿16》:缓存相关代码的演变 -
fxf-风翔飞:
j2eetop 写道fxf-风翔飞 写道这样的话配置项会不会太 ...
《开源框架那点事儿16》:缓存相关代码的演变 -
huangdj:
支持
开源完整版:《开源框架实战宝典电子书V1.0.0》内测版下载地址! -
戢_时光:
...
《开源框架那些事儿22》:UI框架设计实战 -
j2eetop:
zhangchengtest 写道我也感觉注解要好点吧注解的话 ...
《开源框架那点事儿16》:缓存相关代码的演变
Tiny快速入门之Web界面快速开发实践
目录[-]
一、寻找网站模板
二、开工制作
1.编写default.layout布局文件
2.编写UI组件定义文件
3.编写通用宏定义
4.编写业务宏
5.定义演示网站布局文件
6.定义相关页面
首页:
关于:
日志:
画廊:
三、运行
关于
日志
画廊
联系我们
四、总结
前面讲了基于Tiny做服务,这篇来讲讲用Tiny怎么做界面。f
下面是一些常用的链接,供大家使用:
GIT地址(必须是OSC家的):https://git.oschina.net/tinyframework/tiny
问题报告:https://git.oschina.net/tinyframework/tiny/issues
官方网站:http://www.tinygroup.org
更多内容,请看本人博客,不一样的内容,一样的精彩!
本来想改改OSChina的界面,但是研究了一下,OSChina界面实在是高大上呀,不是做不出来,只是工作量比较大,因此还是做个简单的网站来展示一下用Tiny开发界面的过程,同时在展示过程的同时,会把相关的知识做一个充分的介绍 。
一、寻找网站模板
要做网站,不能没有模板,自己不会做网页设计,咋办?问谷歌找百度呗,找了一阵,看到下面这个模板不错,就它了。
http://www.tooplate.com/zip_files/2042_the_block.zip
相仔细了解这篇文章的同学,建议把原板的下载下来,对比着看,会更有感觉。
二、开工制作
1.编写default.layout布局文件
位置:/default.layout
这个是标准布局了,直接贴过来,唯一要改的就是标题处加了“演示网站-”开头。
里面引入的js和css是TinyUI引擎所独有的,主要处理JS,CSS顺序处理、合并、打包等相关,由于这个是框架内部实现的部分,这里只是使用就不展开来叙述了。
${pageContent} 这个标记了渲染替换的位置,一个layout文档中必须有且只能有一个(如果没有,你会发现不管怎么写页面,内容都是布局的内容;如果有多个,你会发现页面中的内容会加多次)。
2.编写UI组件定义文件
位置:/demosite.ui.xml
这里主要是定义用到的js和css,由于只是一个网站,就简单处理,只写一个了,实际应用当中,要根据用途和职能不同定义为许多个UI组件包。
3.编写通用宏定义
位置:/common.component
这面主要定义了4个宏,a是超连接的,img是图片的,link是把链接地址转换成绝对地址,pageTitle用于定义页面的标题和当前页是哪个页面的。
4.编写业务宏
位置:/demosite.component
业务宏的定义,就是根据情况从美工制作的页面文件中抽取一些具有共性的内容,定义成一个宏,这样以后使用的时候,就只要使用有意义的宏而不是原来一堆一堆的Html标记。
5.定义演示网站布局文件
分析一下几个页面,都有页头,页脚,菜单,因此可以把这些共性的文件放在演示网站布局文件中:
位置:/page/default.layout
上面代码的函义是:
在整个页面中,上面放置Header,下面旋转Footer,中间放置内容
最后两段js,是说:对某指定选择器中的图片用lightbox去进行处理。
这里就把所有的通用的部分都抽取到布局文件中了。
6.定义相关页面
首页:
由于这个里面的数据是具体写的,因此就没有再进行抽象,如果这些数据是从数据库来的,那可以再进行一下抽象,就可以用for循环直接搞定了。
关于:
日志:
画廊:
三、运行
一、寻找网站模板
二、开工制作
1.编写default.layout布局文件
2.编写UI组件定义文件
3.编写通用宏定义
4.编写业务宏
5.定义演示网站布局文件
6.定义相关页面
首页:
关于:
日志:
画廊:
三、运行
关于
日志
画廊
联系我们
四、总结
前面讲了基于Tiny做服务,这篇来讲讲用Tiny怎么做界面。f
下面是一些常用的链接,供大家使用:
GIT地址(必须是OSC家的):https://git.oschina.net/tinyframework/tiny
问题报告:https://git.oschina.net/tinyframework/tiny/issues
官方网站:http://www.tinygroup.org
更多内容,请看本人博客,不一样的内容,一样的精彩!
本来想改改OSChina的界面,但是研究了一下,OSChina界面实在是高大上呀,不是做不出来,只是工作量比较大,因此还是做个简单的网站来展示一下用Tiny开发界面的过程,同时在展示过程的同时,会把相关的知识做一个充分的介绍 。
一、寻找网站模板
要做网站,不能没有模板,自己不会做网页设计,咋办?问谷歌找百度呗,找了一阵,看到下面这个模板不错,就它了。
http://www.tooplate.com/zip_files/2042_the_block.zip
相仔细了解这篇文章的同学,建议把原板的下载下来,对比着看,会更有感觉。
二、开工制作
1.编写default.layout布局文件
位置:/default.layout
[AppleScript]
纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
< !DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< head >
< meta http - equiv = "Content-Type"
content = "text/html; charset=utf-8" / >
< title > 演示网站 - $ { pageTitle } < / title >
< meta
name = "keywords" content = ""
/ >
< meta
name = "description" content = ""
/ >
< script
src = "${TINY_CONTEXT_PATH}/uiengine.uijs" > < / script >
< link href = "${TINY_CONTEXT_PATH}/uiengine.uicss"
rel = "stylesheet" / >
< / head >
< body >
$ { pageContent }
< / body >
< / html >
|
这个是标准布局了,直接贴过来,唯一要改的就是标题处加了“演示网站-”开头。
里面引入的js和css是TinyUI引擎所独有的,主要处理JS,CSS顺序处理、合并、打包等相关,由于这个是框架内部实现的部分,这里只是使用就不展开来叙述了。
${pageContent} 这个标记了渲染替换的位置,一个layout文档中必须有且只能有一个(如果没有,你会发现不管怎么写页面,内容都是布局的内容;如果有多个,你会发现页面中的内容会加多次)。
2.编写UI组件定义文件
位置:/demosite.ui.xml
[AppleScript]
纯文本查看 复制代码
1
2
3
4
5
6
|
< ui - components >
< ui - component
name = "demosite" dependencies = "" >
< css - resource > / css / jquery.lightbox -0.5 .css , / css / slider_style.css , / css / tooplate_style.css < / css - resource >
< js - resource > / js / jquery.js , / js / jquery.lightbox -0.5 .js , / js / swfobject.js < / js - resource >
< / ui - component >
< / ui - components >
|
这里主要是定义用到的js和css,由于只是一个网站,就简单处理,只写一个了,实际应用当中,要根据用途和职能不同定义为许多个UI组件包。
3.编写通用宏定义
位置:/common.component
[AppleScript]
纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
#macro a(title url) < a href = "#link(url)" > $ { title } < / a >
#end
#macro img(url alt) < img src = #link(url) alt="${alt}">
#end
#macro link(url)#if(url.startsWith("/"))${TINY_CONTEXT_PATH}#end${url}#end
#macro pageTitle(title page)
#!set(pageTitle=title)
#!set(activePage=page)
#end |
这面主要定义了4个宏,a是超连接的,img是图片的,link是把链接地址转换成绝对地址,pageTitle用于定义页面的标题和当前页是哪个页面的。
4.编写业务宏
位置:/demosite.component
[AppleScript]
纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
#macro header() < div id = "tooplate_header" >
#bodyContent
< / div >
#end
#macro siteTitle(title)) < div id = "site_title" > < h 1 > < a href = "#" > $ { title } < / a > < / h 1 > < / div >
#end
#macro menu() < div id = "tooplate_menu" >
< ul >
#bodyContent
< / ul >
< / div >
#end
#macro menuItem(url title page) < li > < a href = "#link(url)" # if ( activePage = = page )
class = "current" # end
> $ { title } < / a > < / li >
#end
#macro tooplateWrapper()) < div id = "tooplate_wrapper" >
#bodyContent
< / div >
#end
#macro tooplateMiddleSub() < div id = "tooplate_middle_sub" >
#bodyContent
< / div >
#end
#macro tooplateMiddle() < div id = "tooplate_middle" >
#bodyContent
< / div >
#end
#macro flashGridSlider() < div id = "flash_grid_slider" >
alt = "Get Adobe Flash player" / >
< / a >
< / div >
< script type = "text/javascript" >
var flashvars
= { } ;
flashvars.xml_file
= ' #link("/photo_list.pagelet")';
var params
= { } ;
params.wmode
= "transparent" ;
var attributes
= { } ;
attributes. id
= "slider" ;
swfobject.embedSWF ( ' #link(
"/flash_slider.swf" ) ' ,
"flash_grid_slider" , "780" ,
"210" , "9.0.0" , false ,
flashvars , params , attributes ) ;
< / script >
#end
#macro tooplateContent()) < div id = "tooplate_content" >
< span
class = "content_top" > < / span >
#bodyContent
< div
class = "cleaner" > < / div >
< / div >
#end
#macro tooplateFooter()) < div id = "tooplate_footer" >
#bodyContent
< div
class = "cleaner" > < / div >
< / div >
#end
#macro box220(class) < div class = "box_w220 ${class}" >
#bodyContent
< / div >
#end
#macro box330(class) < div class = "box_w330 ${class}" >
#bodyContent
< / div >
#end
#macro gallery() < div id = "gallery" >
#bodyContent
< / div >
#end
#macro galleryBox(largeImage smallImage title alt info class) < div class = "gallery_box ${class}" >
< div
class = "gallery_img" > < span > < / span >
< a href = "#link(largeImage)"
title = "${title}" >
< img src = "#link(smallImage)"
alt = "${alt}" / >
< / a >
< / div >
< h 6 > $ { info } < / h 6 >
< / div >
#end
#macro postBos(comment title imageUrl imageAlt postedInList commentCount) < div class = "post_box" >
< div
class = "comment" > < a href = "#" > $ { comment } < / a > < / div >
< h 2 > $ { title } < / h 2 >
< div
class = "image_wrapper image_fl" > < span > < / span > #img(imageUrl imageAlt)</div>
< p > < span
class = "cat" > Posted
in
#for(postedIn in postedInList)
< a href = "#" > $ { postedIn } < / a >
#end
< / span > < / p >
#bodyContent
$ { commentCount }
comments < a class = "more float_r"
href = "#" > More < / a >
< div
class = "cleaner" > < / div >
< / div >
#end |
业务宏的定义,就是根据情况从美工制作的页面文件中抽取一些具有共性的内容,定义成一个宏,这样以后使用的时候,就只要使用有意义的宏而不是原来一堆一堆的Html标记。
5.定义演示网站布局文件
分析一下几个页面,都有页头,页脚,菜单,因此可以把这些共性的文件放在演示网站布局文件中:
位置:/page/default.layout
[AppleScript]
纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#@tooplateWrapper()
#@header()
#siteTitle("The Block")
#@menu()
#menuItem("index.page" "Home" "Home")
#menuItem("about.page" "About Us" "About")
#menuItem("blog.page" "Blog" "Blog")
#menuItem("gallery.page" "Gallery" "Gallery")
#menuItem("contact.page" "Contact" "Contact")
#end
#end
$ { pageContent }
#@tooplateFooter()
Copyright ©
2048 < a href = "#" > Company Name < / a >
- Design : < a href = "http://www.tooplate.com" > tooplate < / a >
#end
#end < script type = "text/javascript" >
$ ( ' #gallery a').lightBox();
< / script >
< script type = "text/javascript" >
$ ( ' #map a').lightBox();
< / script >
|
上面代码的函义是:
在整个页面中,上面放置Header,下面旋转Footer,中间放置内容
最后两段js,是说:对某指定选择器中的图片用lightbox去进行处理。
这里就把所有的通用的部分都抽取到布局文件中了。
6.定义相关页面
首页:
[AppleScript]
纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
#pageTitle("Home" "Home")
#@tooplateMiddle()
#flashGridSlider()
#end
#@tooplateContent()
< h 2 > Welcome To The Block! < / h 2 >
< div
class = "image_wrapper image_fl" > < span > < / span >
#img("/images/tooplate_image_01.jpg" "image")
< / div >
< p > < em > The Block
is a < a rel = "nofollow"
href = "http://www.tooplate.com" > free website template < / a >
from < a
Photos < / a >
for photos used in this template. < / em > < / p >
< p align = "justify" > Aliquam et augue et odio luctus posuere sit amet et nisi. Maecenas convallis ,
est sit amet
convallis consectetur ,
elementum lacus , ut fermentum elit sem. Duis eu elit tortor ,
sed condimentum nulla.
Phasellus varius posuere adipiscing. Mauris sodales dictum ullamcorper. Validate
< a
href = "http://jigsaw.w3.org/css-validator/check/referer"
rel = "nofollow" > < strong > CSS < / strong > < / a > . < / p >
< div
class = "cleaner h40" > < / div >
#@box220()
< h 4 > pharetra
id turpis < span > Lorem Ipsum Dolor < / span > < / h 4 >
< p >
Lorem ipsum dolor sit amet , consectetur adipiscing elit. Vivamus porta adi Piscing libero ,
eget elem
ntum lectus varius sed. < / p >
< a href = "#"
class = "more" > more < / a >
#end
#@box220()
< h 4 > semper nisl ac nibh < span > Donec Tincidunt Varius < / span > < / h 4 >
< p > Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum
eu mauris
id neque porttitor. < / p >
< a href = "#"
class = "more" > more < / a >
#end
#@box220("rmb")
< h 4 > consect adipiscing elit < span > Etiam Gravida Sagittis < / span > < / h 4 >
< p > Cras eu egestas sem. Aenean mollis feugiat massa ,
eget pharetra nunc interdum non. Etiam euismod sem ac
sem tincidunt adipiscin. < / p >
< a href = "#"
class = "more" > more < / a >
#end
#end |
由于这个里面的数据是具体写的,因此就没有再进行抽象,如果这些数据是从数据库来的,那可以再进行一下抽象,就可以用for循环直接搞定了。
关于:
[AppleScript]
纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
#pageTitle("About" "About")
#@tooplateMiddleSub()
< h 2 > About Our Company < / h 2 >
< p > Sed tempus nunc dolor ,
sit amet aliquet ligula. Ut euismod lectus vel ligula euismod id
porttitor tortor placerat. Aenean tincidunt magna sit amet turpis auctor sagittis. Phasellus aliquet augue nec elit lacinia et faucibus massa scelerisque. < / p >
#end
#@tooplateContent()
< h 2 > Our Company Objectives < / h 2 >
< div class = "image_wrapper image_fr" > < span > < / span >
#img("/images/tooplate_image_01.jpg" "image")
< / div >
< p > < em > Morbi congue lorem sit amet odio iaculis tincidunt. Donec nibh ,
molestie nec pellentesque non , in diam. Class aptent taciti sociosqu ad litora torquent per conubia nostra. < / em > < / p >
< p > Aliquam et augue et odio luctus posuere sit amet et nisi. Maecenas ,
est sit amet convallis consectetur , lacus ligula elementum lacus ,
ut fermentum elit sem et nisi. Duis eu elit tortor ,
sed condimentum nulla. Phasellus varius posuere adipiscing. Mauris sodales ullamcorper. Validate
< a href = "http://validator.w3.org/check?uri=referer"
rel = "nofollow" > < strong > XHTML < / strong > < / a >
and < a href = "http://jigsaw.w3.org/css-validator/check/referer"
rel = "nofollow" > < strong > CSS < / strong > < / a > . < / p >
< div
class = "cleaner h40" > < / div >
#@box330("float_l")
< h 4 > what our customers
say < span > Testimonial < / span > < / h 4 >
< blockquote >
< p > Fusce nec felis
id lacus sollicitudin vulputate. Sed vitae elit
at diam vestibulum ullamcorper et nec quam. Aenean eit ut luctus sit amet ,
elementum quis enim. Proin tincidunt , arcu
id pellentesque accumsan , neque dolor imperdiet ligula ,
quis viverra tellus nulla a odio. Curabitur vitae enim risus ,
at placerat turpis. Mauris feugiat suscipit tempus fringilla ,
felis in velit. < / p >
< cite > Harry
- < span > Senior Webmaster < / span > < / cite >
< / blockquote >
< a href = "#"
class = "more" > more < / a >
#end
#@box330("float_r")
< h 4 > what we do < span > Services < / span > < / h 4 >
< p >
Lorem ipsum dolor sit amet , consectetur adipiscing elit eget elementum lectus varius sed. < / p >
< ul
class = "tooplate_list" >
< li > Morbi quis lorem risus < / li >
< li > Suspendisse cursus < / li >
< li > Donec
at viverra < / li >
< li > Proin eget purus ante < / li >
< / ul >
< a href = "#"
class = "more" > more < / a >
#end
#end |
日志:
[AppleScript]
纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
#pageTitle("Blog" "Blog")
#@tooplateMiddleSub() < h 2 > Our Blog Posts < / h 2 >
< p > Vestibulum eleifend consequat laoreet. Pellentesque vel orci sapien. Duis lacus ipsum ,
pretium ut accumsan in , tempor
nec mauris. Aenean accumsan placerat elit ,
sit amet faucibus ante commodo a. In et neque nibh ,
ac tristique
dui. < / p >
#end
#@tooplateContent()
#@postBos("20" "Lorem ipsum dolor sit amet" "/images/tooplate_image_02.jpg" "Image 02" ["Templates","Freebie"] "148")
< p > Vestibulum adipiscing tempus elit eu condimentum. Fusce
at mi felis. Etiam sed velit nibh. Nunc bibendum
justo elementum auctor. Donec
at magna eu neque. Vestibulum ante ipsum primis
in faucibus orci luctus et
ultrices posuere cubilia.
< / p >
#end
#@postBos("17" "Etiam gravida sagittis lacus" "/images/tooplate_image_03.jpg" "Image 03" ["CSS Templates","Web Design"] "128")
< p > Ellentesque vitae velit eu lectus rhoncus tincidunt. Phasellus dictum dignissim sapien et dapibus. Sed
egestas consequat mauris ,
orci tincidunt sit amet. Donec pharetra porta ultrices. Sed sit amet lectus
rel = "nofollow" > < strong > XHTML < / strong > < / a >
and < a
href = "http://jigsaw.w3.org/css-validator/check/referer"
rel = "nofollow" > < strong > CSS < / strong > < / a > . < / p >
#end
#@postBos("10" "Aenean vitae velit eget" "/images/tooplate_image_04.jpg" "Image 04" ["Illustrations","Graphics"] "208")
< p > Class aptent taciti sociosqu ad litora torquent per conubia nostra ,
per inceptos himenaeos. Proin gravida
ornare mauris ac lobortis. Praesent elit neque ,
lacinia eget interdum eu. Phasellus posuere nisl et odio
egestas ac tristique justo ultrices.
< / p >
#end
#end |
画廊:
[AppleScript]
纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
#pageTitle("Gallery" "Gallery")
#@tooplateMiddleSub() < h 2 > Our Gallery < / h 2 >
< p > Lorem ipsum dolor sit amet ,
consectetur adipiscing elit. Vivamus porta adipiscing libero ,
eget elementum lectus
varius sed. Aliquam metus urna ,
dignissim quis posuere at , posuere eget mauris. Vestibulum laoreet sodales tellus
nec mollis. Validate
< a href = "http://validator.w3.org/check?uri=referer"
rel = "nofollow" > < strong > XHTML < / strong > < / a >
and < a href = "http://jigsaw.w3.org/css-validator/check/referer"
rel = "nofollow" > < strong > CSS < / strong > < / a > . < / p >
#end
#@tooplateContent()
#@gallery()
#galleryBox("/images/gallery/image_01_l.jpg" "/images/gallery/image_01_s.jpg" "Nunc et tellus id risus ultrices" "Image 01" "Nunc et tellus id risus ultrices")
#galleryBox("/images/gallery/image_02_l.jpg" "/images/gallery/image_02_s.jpg" "Nunc et tellus id risus ultrices" "Image 02" "Nunc et tellus id risus ultrices")
#galleryBox("/images/gallery/image_03_l.jpg" "/images/gallery/image_03_s.jpg" "Nunc et tellus id risus ultrices" "Image 03" "Nunc et tellus id risus ultrices" "gb_rmb")
#galleryBox("/images/gallery/image_04_l.jpg" "/images/gallery/image_04_s.jpg" "Nunc et tellus id risus ultrices" "Image 04" "Nunc et tellus id risus ultrices")
#galleryBox("/images/gallery/image_05_l.jpg" "/images/gallery/image_05_s.jpg" "Nunc et tellus id risus ultrices" "Image 05" "Nunc et tellus id risus ultrices")
#galleryBox("/images/gallery/image_06_l.jpg" "/images/gallery/image_06_s.jpg" "Nunc et tellus id risus ultrices" "Image 06" "Nunc et tellus id risus ultrices" "gb_rmb")
#end
#end |
首页
关于
日志
画廊
联系我们
四、总结
上面的完整示例展现了采用Tiny框架开发页面的完整过程,下面总结一下需要说明的一些内容:
- 上面展示采用的模板引擎是TinyTemplate,当然也支持Velocity,但是推荐使用TinyTemplate,因为执行速度更快、功能更强、更容易使用
- 布局支持多重嵌套,上面的示例中有两层布局,根上的解决js、css引入,标题,网站图标等部分的内容,/page/目录中的解决网站的整体结构部分的内容,随着网站的复杂,可以做更多层的布局,使得很多页面共用的部分都放在布局文件中
- xxx.ui.xml定义了UI组件包的内容及其依赖关系,UI引擎会自动根据ui组件包的定义对js及css进行引入、整合、压缩。
- 整个页面只引入一个css和一个js文件,避免引入文件数太多导致的性能下降,同时提供了压缩,提升网络传输效率(这个例子中的文件都已压缩,因此压缩率不高)。
- page文件是用来编写展示内容的页面,在显示.page文件时,有两种方式,一种是.pagelet方式,一种是.page方式,区别在于用.page方式访问时,会渲染布局,而pagelet方式不会渲染布局,适合于Ajax方式使用。
- 整个网站在重构完成之后,没有一段内容是重复的,真正做到Tiny框架所说的DRY原则。
- 所有对上层布局文件的修改都会对所有下层页面产生影响,真正做到Tiny框架所说的下级服从上级原则。
- 越到底层的开发人员接触的越少,真正的页面编写文件,只需要从控制层转过来的数据再利用宏去显示内容即可,可以避免接触js,css,html等相关内容。(这一点在示例中还没有做到,毕竟示例是一个静态网站),真正做到Tiny框架所说的减法原则,越到下面会的技能越少。
- 实际上框架也支持某个页面不服从上层布局的限制,但是我们不推荐这么做,因此这里没有展示这种用法。
采用Tiny框架制作前台,需要考虑好如下角色的协作:
- 美工:用于进行界面设计,页面切分
- UI组件包开发工程师:根据功能特性,把具有不同功能特性的js,css,image等放在一个jar包中 ,并编写对应的xxx.ui.xml文件,并设定好依赖关系,如果需要还需要编写公共的宏文件,用于方便别人使用,并隔离功能与具体的实现,使得后续的开发工程师尽量少的接触css,js。
- 业务组件开发工程师:根据功能特性,把页面中的一些比较业务化的,封装成业务组件,最终暴露的接口是一个名字及一些数据的输入,使得最终的界面开发工程师尽可能少的接触原生的html。
-
界面开发工程师:不关心界面展现的具体技术,利用UI组件包及业务组件开发工程师开发的组件,再加上控制层传过来的数据来编写最终的展现页面。
通过上面的分工,使得不同的开发人员关注于不同的技术细节,从而最大化的提升最终界面开发工程师的开发效率,同时因为有了一定的封装性,可以使得底层的变化不致于影响上层开发人员的工作成果。
相关推荐
### TinyXML入门教程知识点详解 #### 一、XML简介与TinyXML概述 - **XML**:全称为**可扩展标记语言**(EXtensible Markup Language),是一种用于标记数据的语言,允许用户自定义数据的标识,从而区分不同类型的结构...
在TinyXML入门教程中,你可能会学到以下关键概念: 1. **XML元素(Element)**:XML文档的基本组成单元,由标签、属性和内容构成。例如,`<book>`就是一个元素,可能包含属性(如`id="123"`)和内容(如`编程艺术...
本文将深入探讨一个名为"Tiny-WebServer-master"的微型Web服务器,它完全用C语言编写,具有轻量级、快速响应的特点。这个项目旨在提供一个简洁且易于理解的Web服务器实现,对于学习Web服务器原理、网络编程以及C语言...
总的来说,"TinyWeb.zip"中的项目是一个学习和实践C#网络编程的好例子,涵盖了从基础的语言特性到网络通信、服务器实现等多方面知识。通过分析和修改这个项目的源代码,开发者可以深入理解Web服务器的工作原理,提升...
TinyUI是一款专为C++开发者设计的轻量级界面库,它主要致力于提供简洁、高效且易于集成的用户界面解决方案。对于C++程序员来说,TinyUI可以极大地简化UI开发过程,提升开发效率,同时保持程序运行时的性能。 在C++...
XML基础及Tinyxml入门 xml读写 XML基础及Tinyxml入门 xml读写XML基础及Tinyxml入门 xml读写XML基础及Tinyxml入门 xml读写XML基础及Tinyxml入门 xml读写XML基础及Tinyxml入门 xml读写XML基础及Tinyxml入门 xml读写
【TinyWebServer-raw_version_RAW_轻量级web服务器_TinyWebServer】是一个专为网络新手设计的项目,旨在帮助用户理解并实现一个基础的、轻量级的Web服务器。这个项目采用Linux作为开发环境,因此它基于Unix-like系统...
这是一份物联网操作系统TinyOS的介绍资料,对于有意学习TinyOS的童鞋或许会有帮助。
1.The Tiny Web server (tiny.tar). 2.Expands with tar xvf tiny.tar into a directory called ./tiny that contains everything you need to test the Tiny web server, including sample HTML files, GIFS, CGI ...
在本场景中,`TinyWeb web server` 是一个轻量级的Web服务器,它特别之处在于它支持用C语言编写CGI程序。这意味着开发者可以使用C语言这种强大的编程语言来创建动态内容,如网页表单处理、数据库查询等。 **TinyWeb...
总的来说,通过BOA Web服务器在tiny6410开发板上实现Web控制LED,涉及了嵌入式系统的网络编程、CGI编程、Web服务器配置以及硬件接口控制等多个方面,是一个很好的实践项目,可以帮助开发者提升综合技能。
在TinyOS的模块化系统中,开发者可以利用现成的模块快速构建应用程序,同时也可以根据具体需求开发新的模块。 TinyOS中的模块化编程采用NesC语言,它是基于C语言的扩展,专门设计用来编写TinyOS应用程序。在NesC中...
综上所述,基于mini6410_tiny6410的WEB远程视频实时监控系统是一个涵盖硬件、软件和网络的综合项目,它体现了嵌入式开发中的多项关键技术,具有广泛的实用价值和研究意义。通过学习和实践这样的系统,开发者不仅可以...
标题中的“基于tiny210的WEB远程视频实时监控系统”指的是一个利用tiny210处理器构建的网络视频监控解决方案,该系统允许用户通过Web界面实现远程实时视频查看。tiny210是一款基于ARM架构的单板计算机,常用于嵌入式...