WAP初级教程笔记---6

** ** 事件 (EVENT)


任务必须绑定倒某个事件上才能做一些有用的事情。
事件发生--〉任务执行,这才是完整的进程控制。

有4个元素可以帮助你完成事件对任务的绑定:

  1<anchor>、<onevent>、<timer>和<do>。 
  2
  3** <anchor> ** 链接    
  4象HTML一样,WML也可以定义到其他程序的链接。在HTML中,链接通常用下划线和特殊颜色的方式表示跟其他内容的区别。在WAP终端上则没有严格的规则说如何表示一个链接,一般采用反白的显示方式。   
  5  
  6<anchor>的语法如下:  |  <anchor title="STRING" xml:lang="STRING">
  7<br/>, <go>, <img/>, <prev>, <refresh>, TEXT   
  8</refresh></prev></go></anchor>  
  9---  
 10  
 11title:链接的标题;   
 12xml:lang:语言编码。 
 13
 14在这种定义方式中,实际上链接一般是通过<anchor>中包括的<go>元素完成的。比如下面的例子定义了2个CARD,点击第一个CARD里的“click me”链接会跳转到第2个CARD: 
 15
 16<?xml version="1.0"?>
 17<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"   
 18"http ://www.wapforum.com/DTD/wml_1.1.xml">
 19
 20<wml>
 21<card id="Hello" title="Hello">
 22<p>Hello,   
 23<anchor>click me   
 24<go href="#bye"></go>
 25</anchor>
 26</p>
 27</card>
 28<card id="bye" title="Bye">
 29<p>Bye, guys</p>
 30</card>
 31</wml>  
 32---  
 33  
 34点击前显示:  |  点击后显示:   
 35---|---  
 36|  \------- Hello -------   
 37Hello,   
 38  
 39  
 40---  
 41|  \-------- bye --------   
 42Bye, guys   
 43  
 44  
 45---  
 46  
 47链接还有一种短格式,语法如下:   
 48
 49
 50<a href="STRING" title="STRING" xml:lang="STRING">
 51<br/>, <img/>, TEXT   
 52</a>  
 53---  
 54  
 55除了跟原来一样的两个属性以外,多了href属性,可以对它直接指定URL。例如下面的例子定义了一个带有图像的链接:   
 56
 57
 58<a href="wap.hucn.com/HotBars.wml" title="HotBars">
 59<img alt="Hot Bars" src="hot.wbmp">
 60</img></a>  
 61---  
 62  
 63除了跟原来一样的两个属性以外,多了href属性,可以对它直接指定URL。   
 64  
 65** <onevent> ** 固有事件    
 66WML定义了4种由用户终端触发的固有事件: 
 67
 68oneventforward:当用户被<go>任务或其他机制(如一个SCRIPT过程)引导到一个CARD时触发;   
 69oneventbackward:当用回被<prev>或其他机制(如在设备上按BACK按钮)引导到一个CARD时触发;   
 70ontimer:当TIMER计时结束时触发。定义TIMER计时器可以使用<timer>元素,见下一节;   
 71onpick:当用户按下一个<option>选项时触发(可以是选中或取消选择)。 
 72
 73把这些事件绑定到一个任务要使用<onevent>元素,它的语法如下: 
 74
 75<onevent type="oneventforward | oneventbackward | ontimer | onpick">
 76<go>, <noop>, <prev>, <refresh>
 77</refresh></prev></noop></go></onevent>  
 78---  
 79  
 80下面的例子演示了如何使用固有事件在CARD调入时清空变量。   
 81
 82
 83<?xml version="1.0"?>
 84<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"   
 85"http://www.wapforum.org/DTD/wml_1.1.xml">
 86
 87<wml>
 88<card id="card1">
 89<onevent type="oneventforward">
 90<refresh>
 91<setvar name="firstname" value=""></setvar>
 92<setvar name="lastname" value=""></setvar>
 93</refresh>
 94</onevent>
 95<p>   
 96You have no name!   
 97</p>
 98</card>
 99</wml>  
100---  
101  
102<timer> 计时器    
103看名字就知道,这是个计时器,它在经过规定的计时时间以后产生一个任务。<timer>计时器只在所属CARD里有效:当进入CARD时,计时器开始工作;时间一到,触发任务;如果离开CARD,计时器停止。语法如下: 
104
105<timer name="STRING" value="NUMBER"></timer>  
106---  
107  
108name:可选。指定一个包含计时时间的变量,在计时器开始工作以后,变量的值会逐渐减少。如果这个变量在<timer>之前就已经存在并且赋值为一个非负整数,那后面value属性的值会被忽略,直接使用变量里的值作为计时时限。   
109value:必选。指定计时时间,以1/10秒为单位。 
110
111下面的例子每隔1秒显示不同的文字(当然,你有兴趣改成图像也可以)。 
112
113<?xml version="1.0" standalone="yes"?>
114<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" " http://www.wapforum.org/DTD/wml_1.1.xml ">
115
116<wml>
117<head>
118<meta content="WML Editor 3.2" name="generator"/>
119</head>
120<card id="hello" title="Hello">
121<onevent type="ontimer">
122<go href="#card2"></go>
123</onevent>
124<timer value="10"></timer>
125<p> Hello!</p>
126</card>
127<card id="card2" title="card2">
128<onevent type="ontimer">
129<go href="#card3"></go>
130</onevent>
131<timer value="10"></timer>
132<p>R U tired?</p>
133</card>
134<card id="card3" title="card3">
135<onevent type="ontimer">
136<go href="#hello"></go>
137</onevent>
138<timer value="10"></timer>
139<p>Take a rest!</p>
140</card>
141</wml>  
142  
143---  
144  
145显示结果如下,注意会不断循环。  |  |  Sport选择:   
146---|---|---  
147  
148第1秒 
149
150| 
151
152第2秒 
153
154| 
155
156第3秒   
157  
158|  \------ Hello ------   
159Hello!   
160  
161  
162---  
163  
164|  \----- Take care ----   
165R U tired?   
166  
167  
168---  
169  
170|  \------- Rest -------   
171Take a rest!   
172  
173  
174---  
175  
176还有一个例子,通常用来做网站封面,显示一段欢迎词以后进入正式内容。这里没有使用图片,各位可以自己加上试试看。 
177
178<?xml version="1.0"?>
179<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"   
180"http://www.wapforum.org/DTD/wml_1.1.xml">
181
182<wml>
183<card id="Welcome to WAP86" ontimer="wap86.wml">
184<timer value="30"></timer>
185<p>   
186Hello!   
187Welcome to WAP86 - the paradise of WML developers.   
188</p>
189</card>
190</wml>  
191---  
192  
193** 部件  ** |  ** 功能  **  
194---|---  
195accept  |  确认,接受输入   
196prev  |  退回历史页面访问堆栈里上一个CARD   
197help  |  上下文关联的帮助信息   
198reset  |  重设设备状态   
199options  |  上下文关联的选项或附加操作   
200delete  |  删除当前内容或选择   
201unknown  | 
202
203由开发者自己定义   
204  
205<do> 用户触发事件    
206每个WAP终端都预定义了一系列用户界面部件,如手机上的按钮、触摸屏上的图表、声音指令或者其他一些很容易是别的部件。WML1.1定义了右面那些WAP兼容终端必须支持的部件。但是要说明的是,只有prev有预先定义的功能,其他的只是概念上的定义,需要根据开发者激活并赋予一定的动作。   
207  
208当用户激活这些部件的时候会产生相应的事件。你可以使用<do>元素捕获这些事件并对其做出反应。下面是<do>的语法:   
209  
210<do lebel="STRING" name="STRING" optional="true | false" type="accept | prev | help | reset | options | delete | unknown" xml:lang="STRING">
211<go> | <noop> | <prev> | <refresh>
212</refresh></prev></noop></go></do>  
213---  
214  
215type:必选属性,内容只能是那7种;   
216label:用户接口部件的显示标签。如果终端不能显示则被忽略。WML1.1建议此属性长度限制在6个英文字符以内;   
217name:标志“事件/任务”绑定关系的唯一名称(在CARD范围内)。CARD级的<do>事件替换同名的DECK级<do>事件(见下一节)。如果不指定name属性或name为空字符串,则name默认为type的类型;   
218optional:告诉终端此软按钮在屏幕中是否显示。如果此值设为true,则忽略本<do>元素。默认值为false;   
219xml:lang任务:语言代码。 
220
221跟其他“事件/任务”绑定关系一样,<do>里的任务定义必须是<go>、<noop>、<prev>或<refresh>中的一个。   
222下面例子演示了<do>的使用方法。用户按了不同的按钮会被导向不同的CARD。   
223
224
225<?xml version="1.0"?>
226<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"   
227"http://www.wapforum.org/DTD/wml_1.1.xml">
228
229<wml>
230<card id="Card1" title="WAP86 Links">
231<do label="Links" optional="false" type="accept">
232<go href="#Links"></go>
233</do>
234<do label="Help" optional="false" type="help">
235<go href="#Help"></go>
236</do>
237<p> WAP86’s perfect links</p>
238</card>
239<card id="Links" title="WAP86 Links">
240<p> Select one:<br/><br/>
241<a href="wap.hucn.com">hucn</a><br/>
242<a href="wap.hucn.com">hucn</a>
243</p>
244</card>
245<card id="help" title="Help">
246<do label="Links" optional="false" type="accept">
247<go href="#Links"></go>
248</do>
249<p>   
250Select "Links" button to view the links.   
251</p>
252</card>
253</wml>  
254---  
255  
256显示结果   
257---  
258  
259主画面  : 
260
261| 
262
263按下“Links”按钮以后: 
264
265| 
266
267按下“Help”按钮以后:   
268  
269|  \---- WAP86 Links ---   
270WAP86’s perfect links   
271  
272Links Help   
273  
274  
275---  
276  
277|  \---- WAP86 Links ---   
278Select one:   
279  
280&gt;[ WAP86 ]   
281[ AT86 ]   
282  
283---  
284  
285|  \------- Help -------   
286Select "Links" button to view the links.   
287  
288Links   
289---  
290  
291DECK  级事件    
292前面已经讲过可以用<template>元素定义DECK级事件,做法跟CARD级事件一样,只要在<template>元素里包含<do>或<onevent>事件就可以。这种做法可以定义一些在每个CARD里都需要定义的事件,而不需要重复说明。   
293比如下面的例子给所有的CARD定义了BACK按钮以便返回上一页: 
294
295<?xml version="1.0"?>
296<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"   
297"http://www.wapforum.org/DTD/wml_1.1.xml">
298
299<wml>
300<template>
301<do label="BACK" optional="false" type="prev">
302<prev></prev>
303</do>
304</template>
305<card id="Links" title="WAP86 Links">
306<do label="Help" optional="false" type="help">
307<go href="#Help"></go>
308</do>
309<p> Select one:<br/><br/>
310<a href="wap.hucn.com">hucn</a><br/>
311<a href="wap.hucn.com">hucn</a>
312</p>
313</card>
314<card id="help" title="Help">
315<do label="Links" optional="false" type="accept">
316<go href="#Links"></go>
317</do>
318<p>   
319Select "Links" button to view the links.   
320</p>
321</card>
322</wml>  
323---</onevent></do></template></template></do></refresh></prev></noop></go></do></do></do></do></do></do></do></timer></timer></timer></onevent></option></timer></prev></go></onevent></go></anchor></anchor></anchor></do></timer></onevent></anchor>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus