发信人: liy79()
整理人: morefeetin(2000-06-03 10:59:25), 站内信件
|
6。行为(ACTIVITY)
HDML的应用都是围绕ACTIVITY来组织的,ACTIVITY于用户想要执行的TASK有 关,每个ACTIVITY可以包含多个步骤(STEP),ACTIVITY和STEP的概念实际上是针 对手机的特殊性所提出来的,其实no new idea,可以这样理解,例如在邮件服务 中可能有以下ACTIVITY,如编辑新邮件,查看收件箱等,而编辑新邮件这个ACTI VITY可能要通过一些步骤STEP来完成,如写入收件人地址,邮件主题和邮件内容 。
在HDML里,一般一个STEP就对应了一个CARD,例如在查询股票价格的ACTIVI TY中,第一个CARD可以是用来输入股票代码,第二个CARD则用来显示股票价格, 两个CARD间用以前提到的<ACTION>中的TASK=GO来连接。
ACTIVITY可以多层嵌套,例如在查看收件箱的过程中可以进行删除邮件的操 作,此时用TASK=GOSUB来转到删除邮件ACTIVITY的第一个STEP的CARD。在嵌套AC TIVITY中,手机会保存ACTIVITY的状态,即遍变量和CARD的历史记录,用户如果 取消了当前的ACTIVITY,则返回嵌套它的那个ACTIVITY的CARD。
7。变量
变量的作用类似于HTML表单元素中VALUE的作用,HDML中用户可以定义变量名 ,变量名是区分大小写的,字符$, <, >, =, /, \, &, *, #不能用做变量名。建 议变量名尽量短以节省存储空间。变量的应用范围是定义该变量的ACTIVITY中。
1) 变量的设置及引用
test5.hdml
-------------
<HDML VERSION=3.0>
<DISPLAY>
<ACTION TYPE=ACCEPT TASK=GO DEST=#CARD2
VARS=var1=string+1&var2=value+2>
Press OK to view variable values.
</DISPLAY>
<DISPLAY NAME=CARD2>
<WRAP>$var1
<WRAP>$var2
</DISPLAY>
</HDML>
在第一个CARD的<ACTION>中定义了2个变量var1和var2,VARS属性定义变量的 形式为VARS=变量名1=值&变量名2=值&...,注意上例中定义了两个字符串,+号代 表了空格,这和一般URL的参数定义一致。在CARD2中用$变量名的形式来引用变量 。变量的具体引用方法有以下三种,主要区别在于是否将URL传递所要求的字符转 意(escape),如同javascript的escape()函数。
$变量名 或者 $(变量名) 根据URL的需要escape字符串
$(变量名:esc) escape字符串
$(变量名:noesc) 不escape字符串
2) 获得用户的输入
test6.hdml
-----------
<HDML VERSION=3.0 MARKABLE=false>
<ENTRY NAME=CardName KEY=usrName>
<ACTION TYPE=ACCEPT TASK=GO DEST="#CARD2">
Your name:
</ENTRY>
<DISPLAY NAME=CARD2>
Hello $usrName
</DISPLAY>
</HDML>
<ENTRY>相当于HTML表单中TEXT类型的<INPUT>,用来取得用户的输入数据, 该数据将存储在KEY所指定的变量名中,NAME属性指定的是CARD的名字,以便其他 CARD引用。其他比较常用的属性还有DEFAULT,用来定义默认值,NOECHO=TRUE, 则用*来替代输入的字符。
这里补充一下选单中如何获得值,
<CHOICE KEY=var1 IKEY=var2>
<CE VALUE=1 LABLE=1>Choice 1
<CE VALUE=2 LABLE=2>Choice 2
<CE VALUE=3 LABLE=3>Choice 3
</CHOICE>
<CHOICE>的KEY属性指定了接收<CE>的VALUE值的变量,IKEY所指定的变量接 收被选选项的序号。同样,<CHOICE>可以用DEFAULT和IDEFAULT来指定默认值。
3) 在ACTIVITY间传递参数
* ACTIVITY 1嵌套ACTIVITY 2,ACTIVITY 1可通过<ACTION(也可以通过CE ,下同) TASK=GOSUB VARS=varname=value>的形式将变量varname传递给ACTIVIT Y 2。
* ACTIVITY 1嵌套ACTIVITY 2,ACTIVITY 1可以用RECEIVE属性指定变量来 接受从ACTIVITY 2返回过来的变量值,而ACTIVITY 2用RETVALS属性来将这些变量 值返回给ACTIVITY 1。形式为<ACTION RECEIVE=var1;var2>,如果不要var1,可 用RECEIVE=;var2,RETVALS的用法类似,<ACTION TASK=RETURN RECEIVE=var1;v ar2>。
* ACTIVITY 1嵌套ACTIVITY 2,ACTIVITY 2可以用CLEAR属性,形式为<AC TION TASK=RETURN(或者CANCEL) CLEAR=TRUE>来释放ACTIVITY 1的变量。
这里总结一下TASK属性(一般在<ACTION>和<CE>中)的可设定值:
GO 转到DEST指定的URL或者CARD
GOSUB 转到DEST指定的嵌套ACTIVITY
RETURN 嵌套ACTIVITY返回调用它的CARD
CANCEL 取消当前的ACTIVITY
PREV 返回前一个CARD
CALL 不要忘了这是手机,拨打NUMBER属性指定的电话
NOOP 不做什么
8。CGI
这里只是简单提一下HDML和CGI相关的一些内容,总的来说其总是符合HTTP协 议以及CGI标准的。在<ACTION>和<CE>中可以通过METHOD属性指定传递方式为GET 或者POST,用POSTDATA指定要POST的数据。CGI程序在接收时可按照标准的方式获 得数据,在输出时将Content-type:指定为text/x-hdml。UP.SDK提供了详细的技 术资料和程序库,这里就不提了。
以上的内容只是入门部分,注意在讲述过程中忽略了UP.Link Server部分, 在开发交互式程序中要考虑该部分。
-- * * * *
* * * 话不嫌多,知心就好
* {~._.~} * 即刻 CALL IN
* ( Y ) * ICQ:37754773
* ()~*~() * 中文网址:星际争霸-梦幻之战
* (_)-(_) * http://starcraft.my163.net
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.99.167.125]
|
|