XForm控件

1、input
  • 要根据关联(ref)或绑定(bind)的MIP(Model Item Property)决定显示的具体是什么,录入方式如何,文本框、多行文本框还是DatePicker;
  • 要能根据实际情况调整录入后的显示内容,如金额录入框,数字要能调整为千分位分隔。
  • 校验,当然了。
  • 除了Base64Type不能存储,其他都可以用input来存放输入。
  • <input ref="string"> <!-- bound to node with XML Schema type xs:string -->
      
    <label>xsd:string</label>
    </input>
    <input ref="date"> <!-- bound to node with XML Schema type xs:date -->
      
    <label>Ship By:</label>
    </input>

2、secret
    就是 input type=password
   
<secret ref="/session/password">
  
<label>Password</label>
</secret>

3、textarea
    同理
<textarea ref="/msg:Message/mime:Body">
  
<label>Message Body:</label>
</textarea>

4、output
  • 输出文本,遵循跟input一样的自调整原则
  • 不一定需要<label>了
  • 如果要显示的值跟关联实例节点关系不大,就可以只用value属性存放XPath表达式,而不用ref属性。
5、upload
  • 规范命名了几种可能的输入源:
    • file upload,如image、audio、text、data和其他格式的文件,只能一次上传一个文件。
    • scribble,网页上似乎应用不多了,在线绘图
    • acquire image,除非控件支持了,否则网页如何做到直接从数码相机导入图片呢
    • record audio,录音,同上
    • record video
    • 其他可能:3D扫描录入、可视化编辑器
  • 使用mediatype属性描述上传的类型,MIME串,如果设备不支持,要能提示用户
  • 如何使用这个控件呈现已经上传的内容?要思考一下
  • 其target只能是二进制类型,如base64Binary或hexBinary,是否可以用url而特殊标示出来?
  • <upload bind="attachment1">
      
    <label>Select a file</label>
      
    <filename bind="fname1"/>
      
    <mediatype bind="mt1"/>
    </upload>
6、range
  • 输入一定范围内的数据,要素:start、end和step
  • 某些数据类型可用此控件,如 xs:duration, xs:date, xs:time, xs:dateTime, xs:gYearMonth, xs:gYear, xs:gMonthDay, xs:gDay, xs:gMonth, xs:float, xs:decimal, xs:double
7、trigger
  • 跟HTML的button对应,实际在草案中就是叫button;触发xform的action的扳机,按钮只是其中一种表现形式,其他可能性包括image、hyperlink等
  • 虽然不直接读写数据,但也具备bind属性以便赋予MIP,所以必要的时候可以disable掉
  • <trigger>
      
    <label>Login</label>
      
    </trigger>
8、submit
  • 是trigger的特例,可以提交表单;提交参数通过其submission属性指向的IDREF的元素取得
  • <submit submission="formdata">
      
    <label>Buy</label>
    </submit>
9、select1
  • 单选控件,表现形式多样
  • 例子:
    <select1 ref="cpu" appearance="full" accesskey="C">
      
    <label>CPU</label>
      
    <item>
        
    <label>Pentium 4 2.53Ghz - $220</label>
        
    <value>2.5</value>
      
    </item>
      
    <item>
        
    <label>Pentium 4 2.8Ghz - $415</label>
        
    <value>2.8</value>
      
    </item>
      
    <item>
        
    <label>Pentium 4 3.06Ghz - $620</label>
        
    <value>3.0</value>
      
    </item>
    </select1>
  • 如果对应的实例初始化数据在select1中找不到,就不显示选中了什么。
  • 如果selection属性等于“open”,则可以让用户自己录入有别于所有选项的“其他”内容,也受验证机制约束。
  • appearance属性可以做一些粗粒度的显示控制:
    • full 显示全部的选项
    • compact 如一个下拉框
    • minimal 最少,如要一个下拉菜单才能打开,紧凑型
10、select
  • 选择没有东西、一个东西或者多个东西,很多特性跟select1一致
  • 对于多选,采集的数据是空格分隔的,因此每一项都不能包含空格
  • 应避免实例数据在提供的选项数据中找不到的情形
  • 理想的情形是绑定到从list继承的数据类型,内建类型也不是不行(string),下面描述更复杂的绑定。
  • <select ref="cctype">
      
    <label>List For Specifying All Card Types</label>
      
    <item>
        
    <label>Master Card</label>
        
    <value>MC</value>
      
    </item>
      
    <item>
        
    <label>Visa Card</label>
        
    <value>VI</value>
      
    </item>
      
    <item>
        
    <label>American Express</label>
        
    <value>AE</value>
      
    </item>
      
    <item>
        
    <label>Diners Club</label>
        
    <value>DC</value>
      
    </item>
    </select>
11、复杂的列表
  • select和select1经过配置也可以指向结构化的实例节点,而不只是simpleContent或者string。
  • 通过itemset获取节点集合作为选项,如:
    <xforms:model id="list_items">
      
    <xforms:instance>
        
    <options>
          
    <email desc="work address">mdubinko@example.info</email>
          
    <email desc="home address">mdubinko@example.org</email>
          
    <email desc="alternate address">nospam@example.net</email>
        
    </options>
      
    </xforms:instance>
    <xforms:model>

    <xforms:model id="form_data">
      
    <xforms:instance>
        
    <user_selection/>
      
    </xforms:instance>
    </xforms:model>

    <xforms:select ref="." model="form_data">
      
    <xforms:label>Send a copy to the following email addresses</xforms:
              label><xforms:itemset nodeset="email" model="list_items"
    >
        
    <xforms:label><xforms:output value="concat('Your ', @desc)"/></xforms:
    label
    >
        
    <xforms:value ref="."/>
      
    </xforms:itemset>
    </xforms:select>
    • 根据itemset的内容,表达式“concat('Your',@desc)”会产生三个不同的label,value属性算成string类型的值
    • 前提是itemset中的item必须保持一致性,
      • 应该都是element并且是兄弟节点
      • 所有item包括命名空间在内的名字都要一样
      • itemset的序列要连续,即中间不能出现其他类型的节点
      • “copy”元素执行深拷贝,不只是产生值,包括节点、属性和值都会采集
      • 总体讲 itemset行为方式很像repeat
12、在大多控件中都会出现的标签:
  • labels
    • 强制必备
    • label的内容可以是text、宿主语言(如css)的 标签(包括图片标签)、或者一个output控件,甚至可以来自一个外部文件(src属性),通过单节点绑定语法,还可以指向实例数据。
  • help、hint和alert
    • help就是tooltip,帮助理解的
    • hint就是缩略显示,如太长的文本要缩略显示加省略号,鼠标放在上面一定时间就自动显示完整内容
    • alert是验证失败的提示语
    • 跟label一样,可以有丰富的来源形式
  • navigation order
    • 就是tabindex,这里叫navindex,默认0
  • keyboard shortcut
    • 快捷键,注意避开浏览器已经使用的那些
  • 粗粒度的显示模式
    • select那里讲过了,appearance,所有控件都有这个属性,为form designer提供粗粒度界面呈现指示,细粒度还得css
  • input mode
    • 输入法,空格分隔的tag,如

      simplifiedHanzi symbols  暂不深究

  • event handler
    • 某些控件的子控件如items可以有事件句柄,以后再说。
原文地址:https://www.cnblogs.com/xiaotaoliang/p/708028.html