发信人: 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]
  | 
 
 
 |