- 要根据关联(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>
就是 input type=password
<secret ref="/session/password">
<label>Password</label>
</secret>
<label>Password</label>
</secret>
3、textarea
同理
<textarea ref="/msg:Message/mime:Body">
<label>Message Body:</label>
</textarea>
<label>Message Body:</label>
</textarea>
4、output
- 输出文本,遵循跟input一样的自调整原则
- 不一定需要<label>了
- 如果要显示的值跟关联实例节点关系不大,就可以只用value属性存放XPath表达式,而不用ref属性。
- 规范命名了几种可能的输入源:
- 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>
- 输入一定范围内的数据,要素: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
- 跟HTML的button对应,实际在草案中就是叫button;触发xform的action的扳机,按钮只是其中一种表现形式,其他可能性包括image、hyperlink等
- 虽然不直接读写数据,但也具备bind属性以便赋予MIP,所以必要的时候可以disable掉
-
<trigger>
<label>Login</label>
</trigger>
- 是trigger的特例,可以提交表单;提交参数通过其submission属性指向的IDREF的元素取得
-
<submit submission="formdata">
<label>Buy</label>
</submit>
- 单选控件,表现形式多样
- 例子:
<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 最少,如要一个下拉菜单才能打开,紧凑型
- 选择没有东西、一个东西或者多个东西,很多特性跟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>
- 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
- 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可以有事件句柄,以后再说。