Zend_Dojo-View-Helpers.xml 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940
  1. <sect2 id="zend.dojo.view.dijit">
  2. <title>Dijit-Specific 视图助手 </title>
  3. <para>
  4. 引用一下 Dojo 手册:“Dijit 是基于 dojo 之上的一个小部件系统”,Dijit 有
  5. 许多布局和表单小部件,用来提供访问、本地化和标准化(和可主题化)的观感。
  6. </para>
  7. <para>
  8. Zend Framework 带有许多视图助手让你在视图脚本里解析和使用 dijits。有三个基本类型:
  9. </para>
  10. <itemizedlist>
  11. <listitem>
  12. <para>
  13. <emphasis>布局容器</emphasis>:
  14. 这些设计上在视图脚本理使用或由表单装饰器用于表单、子表单和显示组。
  15. 它们封装了 dijit.layout 提供的各种类。每个 dijit 布局视图助手有下面的参数:
  16. </para>
  17. <itemizedlist>
  18. <listitem><para>
  19. <code>$id</code>: 容器名或 DOM ID。
  20. </para></listitem>
  21. <listitem><para>
  22. <code>$content</code>: 在布局容器里封装的内容。
  23. </para></listitem>
  24. <listitem><para>
  25. <code>$params</code> (optional): dijit-specific 参数。
  26. 基本上是任何非 HTML 属性,可用于配置 dijit 布局容器。
  27. </para></listitem>
  28. <listitem><para>
  29. <code>$attribs</code> (可选):任何用于解析容器 div 的附加的 HTML 属性。
  30. 如果在这个数组里传递了键 'id',它将被用于表单元素 DOM id,并且 <code>$id</code>
  31. 将用于它的名字。
  32. </para></listitem>
  33. </itemizedlist>
  34. <para>
  35. 如果不传递参数给 dijit 布局视图助手,那么助手将返回自己。
  36. 它允许你抓取内容,通常是更容易的传递内容给布局容器的方法。
  37. 本章的后面将用范例来示范这个功能。
  38. </para>
  39. </listitem>
  40. <listitem>
  41. <para>
  42. <emphasis>Form Dijit</emphasis>: dijit.form.Form dijit,虽然对于使用 dijit
  43. 表单元素不是完全必要,但是它可以确保如果提交没有根据客户端校验而校验的表单时,
  44. 提交就被终止并且产生校验错误消息。该表单 dijit 视图助手可带有下列参数:
  45. </para>
  46. <itemizedlist>
  47. <listitem><para>
  48. <code>$id</code>: 容器名或 DOM ID。
  49. </para></listitem>
  50. <listitem><para>
  51. <code>$attribs</code> (可选):任何用于解析容器 div 的附加的 HTML 属性。
  52. </para></listitem>
  53. <listitem><para>
  54. <code>$content</code> (可选):要封装到表单的内容。如果没有,将使用空的字符串。
  55. </para></listitem>
  56. </itemizedlist>
  57. <para>
  58. 为了和标准的 <code>form()</code> 视图助手保持兼容,参数顺序和其它 dijit 有些不同。
  59. </para>
  60. </listitem>
  61. <listitem>
  62. <para>
  63. <emphasis> 表单元素 </emphasis>:设计上和 <code>Zend_Form</code> 一起使用,但也
  64. 可以在视图脚本中独立使用。每个 dijit 元素视图助手可以使用下列参数:
  65. </para>
  66. <itemizedlist>
  67. <listitem><para>
  68. <code>$id</code>: 元素名或 DOM ID。
  69. </para></listitem>
  70. <listitem><para>
  71. <code>$value</code> (可选):元素的当前值。
  72. </para></listitem>
  73. <listitem><para>
  74. <code>$params</code> (可选): dijit-specific 参数。
  75. 基本上是任何用于配置 dijit 的非 HTML 属性。
  76. </para></listitem>
  77. <listitem><para>
  78. <code>$attribs</code> (可选):任何用于解析 dijit的附加的 HTML 属性。
  79. 如果键 'id' 在这个数组中传递,它将被用于表单元素的 DOM id,
  80. 并且 <code>$id</code> 将被用于它的名字。
  81. </para></listitem>
  82. </itemizedlist>
  83. <para>
  84. 一些元素要求更多的参数,将在个别元素助手的描述中注明。
  85. </para>
  86. </listitem>
  87. </itemizedlist>
  88. <para>
  89. 为了使用这些视图助手,你需要用视图对象来注册路径给 dojo 视图助手。
  90. </para>
  91. <example id="zend.dojo.view.dijit.prefixpath">
  92. <title> 注册 Dojo 视图助手前缀路径 </title>
  93. <programlisting role="php"><![CDATA[
  94. $view->addHelperPath('Zend/Dojo/View/Helper', 'Zend_Dojo_View_Helper');
  95. ]]></programlisting>
  96. </example>
  97. <sect3 id="zend.dojo.view.dijit.layout">
  98. <title>Dijit 布局元素 </title>
  99. <para>
  100. dijit.layout 元素家族用来生成定制的、可预计的布局。任何关于用法的问题
  101. <ulink
  102. url="http://dojotoolkit.org/book/dojo-book-0-9/part-2-dijit/layout">
  103. 请阅读 Dojo 手册</ulink>。
  104. </para>
  105. <para>
  106. 所有的 dijit 布局元素都有签名 <code>string ($id = null, $content = '', array $params =
  107. array(), array $attribs = array())</code>。
  108. 对于所有情况,如果不传递参数,就返回助手对象自己。
  109. 访问 <code>captureStart()</code> 和 <code>captureEnd()</code> 方法,它让你
  110. 抓取内容而不是传递它给布局容器。
  111. </para>
  112. <itemizedlist>
  113. <listitem>
  114. <para>
  115. <emphasis>AccordionContainer</emphasis>:dijit.layout.AccordionContainer。
  116. 垂直堆放所有的 pane ,点击一个 pane 的 titlebar 就会展开并显示特定的 pane。
  117. </para>
  118. <programlisting role="php"><![CDATA[
  119. <?= $view->accordionContainer(
  120. 'foo',
  121. $content,
  122. array(
  123. 'duration' => 200,
  124. ),
  125. array(
  126. 'style' => 'width: 200px; height: 300px;',
  127. ),
  128. ); ?>
  129. ]]></programlisting>
  130. </listitem>
  131. <listitem>
  132. <para>
  133. <emphasis>AccordionPane</emphasis>: dijit.layout.AccordionPane.
  134. 在 AccordionContainer 内使用。
  135. </para>
  136. <programlisting role="php"><![CDATA[
  137. <?= $view->accordionPane(
  138. 'foo',
  139. $content,
  140. array(
  141. 'title' => 'Pane Title',
  142. ),
  143. array(
  144. 'style' => 'background-color: lightgray;',
  145. ),
  146. ); ?>
  147. ]]></programlisting>
  148. </listitem>
  149. <listitem>
  150. <para>
  151. <emphasis>BorderContainer</emphasis>:dijit.layout.BorderContainer。
  152. 用象传统程序中的可改变尺寸的 pane 来完成布局。
  153. </para>
  154. <programlisting role="php"><![CDATA[
  155. <?= $view->borderContainer(
  156. 'foo',
  157. $content,
  158. array(
  159. 'design' => 'headline',
  160. ),
  161. array(
  162. 'style' => 'width: 100%; height: 100%',
  163. ),
  164. ); ?>
  165. ]]></programlisting>
  166. </listitem>
  167. <listitem>
  168. <para>
  169. <emphasis>ContentPane</emphasis>: dijit.layout.ContentPane。
  170. 用在除了 AccordionContainer 以外的任何容器内部。
  171. </para>
  172. <programlisting role="php"><![CDATA[
  173. <?= $view->contentPane(
  174. 'foo',
  175. $content,
  176. array(
  177. 'title' => 'Pane Title',
  178. 'region' => 'left',
  179. ),
  180. array(
  181. 'style' => 'width: 120px; background-color: lightgray;',
  182. ),
  183. ); ?>
  184. ]]></programlisting>
  185. </listitem>
  186. <listitem>
  187. <para>
  188. <emphasis>SplitContainer</emphasis>:dijit.layout.SplitContainer。
  189. 允许可变尺寸的内容 pane;在 Dojo 里废除转而使用 BorderContainer。
  190. </para>
  191. <programlisting role="php"><![CDATA[
  192. <?= $view->splitContainer(
  193. 'foo',
  194. $content,
  195. array(
  196. 'orientation' => 'horizontal',
  197. 'sizerWidth' => 7,
  198. 'activeSizing' => true,
  199. ),
  200. array(
  201. 'style' => 'width: 400px; height: 500px;',
  202. ),
  203. ); ?>
  204. ]]></programlisting>
  205. </listitem>
  206. <listitem>
  207. <para>
  208. <emphasis>StackContainer</emphasis>:dijit.layout.StackContainer。
  209. 所有在 StackContainer 里的 pane 放在一个堆栈里,生成按钮或功能一次显示一个。
  210. </para>
  211. <programlisting role="php"><![CDATA[
  212. <?= $view->stackContainer(
  213. 'foo',
  214. $content,
  215. array(),
  216. array(
  217. 'style' => 'width: 400px; height: 500px; border: 1px;',
  218. ),
  219. ); ?>
  220. ]]></programlisting>
  221. </listitem>
  222. <listitem>
  223. <para>
  224. <emphasis>TabContainer</emphasis>:dijit.layout.TabContainer。
  225. 所有在 TabContainer 里的 pane 放在一个堆栈里,并带有 tab 的位置,用于切换。
  226. </para>
  227. <programlisting role="php"><![CDATA[
  228. <?= $view->stackContainer(
  229. 'foo',
  230. $content,
  231. array(),
  232. array(
  233. 'style' => 'width: 400px; height: 500px; border: 1px;',
  234. ),
  235. ); ?>
  236. ]]></programlisting>
  237. </listitem>
  238. </itemizedlist>
  239. <para>
  240. 下列的抓取方法对所有的布局容器都可用:
  241. </para>
  242. <itemizedlist>
  243. <listitem>
  244. <para>
  245. <code>captureStart($id, array $params = array(), array $attribs = array())</code>:
  246. 开始抓取内容到容器。<code>$params</code> 是和容器一起使用的 dijit 参数,
  247. <code>$attribs</code> 指的是任何一般的 HTML 属性。
  248. </para>
  249. <para>
  250. <emphasis> 只要 ids 没有重复 </emphasis>,容器在抓取的时候可以嵌套。
  251. </para>
  252. </listitem>
  253. <listitem>
  254. <para>
  255. <code>captureEnd($id)</code>:
  256. 完成抓取内容到容器。<code>$id</code> 是指先前和 <code>captureStart()</code>
  257. 调用一起使用的 id。返回一个字符串表示容器和它的内容,就好像传递内容给助手自己。
  258. </para>
  259. </listitem>
  260. </itemizedlist>
  261. <example id="zend.dojo.view.dijit.layout.borderexample">
  262. <title>BorderContainer 布局 dijit 范例</title>
  263. <para>
  264. BorderContainers, 特别是当和抓取内容耦合时,对复杂的布局效果特别有用。
  265. </para>
  266. <programlisting role="php"><![CDATA[
  267. $view->borderContainer()->captureStart('masterLayout', array('design' => 'headline'));
  268. echo $view->contentPane(
  269. 'menuPane',
  270. 'This is the menu pane',
  271. array('region' => 'top'),
  272. array('style' => 'background-color: darkblue;')
  273. );
  274. echo $view->contentPane(
  275. 'navPane',
  276. 'This is the navigation pane',
  277. array('region' => 'left'),
  278. array('style' => 'width: 200px; background-color: lightblue;')
  279. );
  280. echo $view->contentPane(
  281. 'mainPane',
  282. 'This is the main content pane area',
  283. array('region' => 'center'),
  284. array('style' => 'background-color: white;')
  285. );
  286. echo $view->contentPane(
  287. 'statusPane',
  288. 'Status area',
  289. array('region' => 'bottom'),
  290. array('style' => 'background-color: lightgray;')
  291. );
  292. echo $view->borderContainer()->captureEnd('masterLayout');
  293. ]]></programlisting>
  294. </example>
  295. </sect3>
  296. <sect3 id="zend.dojo.view.dijit.form">
  297. <title>Dijit 表单元素 </title>
  298. <para>
  299. Dojo 的表单校验和输入 dijit 在 dijit.form 树中。
  300. 更多关于这些元素的一般用法和可接受的参数,请
  301. <ulink
  302. url="http://dojotoolkit.org/book/dojo-book-0-9/part-2-dijit/form-validation-specialized-input">访问
  303. dijit.form 文档</ulink>.
  304. </para>
  305. <para>
  306. 下列 dijit 表单元素在 Zend Framework 里可用。
  307. 除非注明,都有签名 <code>string ($id,
  308. $value = '', array $params = array(), array $attribs =
  309. array())</code>.
  310. </para>
  311. <itemizedlist>
  312. <listitem>
  313. <para>
  314. <emphasis>Button</emphasis>: dijit.form.Button. 显示一个表单按钮
  315. </para>
  316. <programlisting role="php"><![CDATA[
  317. <?= $view->button(
  318. 'foo',
  319. 'Show Me!',
  320. array('iconClass' => 'myButtons'),
  321. ); ?>
  322. ]]></programlisting>
  323. </listitem>
  324. <listitem>
  325. <para>
  326. <emphasis>CheckBox</emphasis>:dijit.form.CheckBox.
  327. 显示一个 checkbox。接受可选的第五个参数,<code>$checkedOptions</code> 数组,
  328. 包含:
  329. </para>
  330. <itemizedlist>
  331. <listitem><para>
  332. 按顺序带两个值的索引数组,一个选中的值和一个未选中的值;或者
  333. </para></listitem>
  334. <listitem><para>
  335. 带键 'checkedValue' 和 'unCheckedValue'的联合数组。
  336. </para></listitem>
  337. </itemizedlist>
  338. <para>
  339. 如果没有提供 <code>$checkedOptions</code> 就假定为 1 和 0 。
  340. </para>
  341. <programlisting role="php"><![CDATA[
  342. <?= $view->checkBox(
  343. 'foo',
  344. 'bar',
  345. array(),
  346. array(),
  347. array('checkedValue' => 'foo', 'unCheckedValue' => 'bar')
  348. ); ?>
  349. ]]></programlisting>
  350. </listitem>
  351. <listitem>
  352. <para>
  353. <emphasis>ComboBox</emphasis>:dijit.layout.ComboBox.
  354. 组合框是一个混合体,包括选择框和带有自动完成的文字框。
  355. 关键是在列表里没有相应的选项的时候可以手工输入,而且是有效的。
  356. 它接受可选的第五个参数:联合数组 <code>$options</code>;如果提供
  357. 了该参数,ComboBox 就当作 <code>select</code> 被解析。也要注意
  358. <code>$options</code> 数组的 <emphasis>标签值</emphasis> 在表单中返回,
  359. 而不选项值自己。
  360. </para>
  361. <para>
  362. 另外,也可以传递关于和元素一起使用的 dojo.data 数据存储的信息。
  363. 如果提供该参数,ComboBox 就当作 <code>input</code> 被解析,
  364. 并且将通过那个数据存储来取出它的选项。
  365. </para>
  366. <para>
  367. 为了指定数据存储,请提供下列 <code>$params</code> 键组合之一:
  368. </para>
  369. <itemizedlist>
  370. <listitem>
  371. <para>
  372. 键 'store',带有一个数组值;数组应包含下列键:
  373. </para>
  374. <itemizedlist>
  375. <listitem><para>
  376. <emphasis>store</emphasis>:表示数据存储的 javascript 变量名
  377. (this could be the name you would like for it to use)。
  378. </para></listitem>
  379. <listitem><para>
  380. <emphasis>type</emphasis>:数据存储类型;例如:'dojo.data.ItemFileReadStore'。
  381. </para></listitem>
  382. <listitem><para>
  383. <emphasis>params</emphasis> (可选):一个键/值对的联合数组,用来配置数据存储。
  384. 'url' 参数是个典型的例子。
  385. </para></listitem>
  386. </itemizedlist>
  387. </listitem>
  388. <listitem>
  389. <para>
  390. 键:
  391. </para>
  392. <itemizedlist>
  393. <listitem><para>
  394. <emphasis>store</emphasis>:表示数据存储名的字符串。
  395. </para></listitem>
  396. <listitem><para>
  397. <emphasis>storeType</emphasis>:表示数据存储 dojo.data 类型的字符传(例如 'dojo.data.ItemFileReadStore')。
  398. </para></listitem>
  399. <listitem><para>
  400. <emphasis>storeParams</emphasis>:一个键/值对联合数组,用于配置数据存储。
  401. </para></listitem>
  402. </itemizedlist>
  403. </listitem>
  404. </itemizedlist>
  405. <programlisting role="php"><![CDATA[
  406. // As a select element:
  407. echo $view->comboBox(
  408. 'foo',
  409. 'bar',
  410. array(
  411. 'autocomplete' => false,
  412. ),
  413. array(),
  414. array(
  415. 'foo' => 'Foo',
  416. 'bar' => 'Bar',
  417. 'baz' => 'Baz',
  418. )
  419. );
  420. // As a dojo.data-enabled element:
  421. echo $view->comboBox(
  422. 'foo',
  423. 'bar',
  424. array(
  425. 'autocomplete' => false,
  426. 'store' => 'stateStore',
  427. 'storeType' => 'dojo.data.ItemFileReadStore',
  428. 'storeParams' => array('url' => '/js/states.json'),
  429. ),
  430. );
  431. ]]></programlisting>
  432. </listitem>
  433. <listitem>
  434. <para>
  435. <emphasis>CurrencyTextBox</emphasis>:dijit.form.CurrencyTextBox。
  436. 从 ValidationTextBox 继承,并提供货币的客户端校验。
  437. 它期望 dijit 参数 'currency' 的值是适当的三字符货币代码。
  438. 可以为 ValidationTextBox 和 TextBox 指定任何有效的 dijit 参数。
  439. </para>
  440. <programlisting role="php"><![CDATA[
  441. echo $view->currencyTextBox(
  442. 'foo',
  443. '$25.00',
  444. array('currency' => 'USD'),
  445. array('maxlength' => 20)
  446. );
  447. ]]></programlisting>
  448. <note>
  449. <title>Issues with Builds</title>
  450. <para>
  451. 目前有这些 <ulink
  452. url="http://trac.dojotoolkit.org/ticket/7183">
  453. 和 build 层一起使用的 CurrencyTextBox 的已知问题
  454. </ulink>.
  455. 一个解决办法是确保文档的 Content-Type http-equiv meta tag 把字符集设置为 utf-8,
  456. 可通过调用下列方法来完成:
  457. </para>
  458. <programlisting role="php"><![CDATA[
  459. $view->headMeta()->appendHttpEquiv('Content-Type', 'text/html; charset=utf-8');
  460. ?>]]></programlisting>
  461. <para>
  462. 这当然意味着你需要确保 <code>headMeta()</code> 占位符在布局脚本中。
  463. </para>
  464. </note>
  465. </listitem>
  466. <listitem>
  467. <para>
  468. <emphasis>DateTextBox</emphasis>:dijit.form.DateTextBox.
  469. 从 ValidationTextBox 继承,提供客户端的日期校验和下拉式日历。
  470. 你可以指定任何 dijit 可用的参数给 ValidationTextBox 或 TextBox。
  471. </para>
  472. <programlisting role="php"><![CDATA[
  473. echo $view->dateTextBox(
  474. 'foo',
  475. '2008-07-11',
  476. array('required' => true)
  477. );
  478. ]]></programlisting>
  479. </listitem>
  480. <listitem>
  481. <para>
  482. <emphasis>FilteringSelect</emphasis>:dijit.form.FilteringSelect。
  483. 和 ComboBox 类似,这是个选择/文字混合体,它可以从提供的选项列表
  484. 里读取或者从 dojo.data 数据存储里抓取。和 ComboBox 不一样的地方是
  485. FilteringSelect 不允许输入不在列表里的选项。另外,它的操作和标准选择
  486. 一样,从选项值里选择而不是从标签里选择,当表单提交时返回它们。
  487. </para>
  488. <para>
  489. 请参考上述关于 ComboBox 范例和定义数据存储的可用选项的信息。
  490. </para>
  491. </listitem>
  492. <listitem>
  493. <para>
  494. <emphasis>HorizontalSlider</emphasis> 和
  495. <emphasis>VerticalSlider</emphasis>:
  496. dijit.form.HorizontalSlider 和 dijit.form.VerticalSlider.
  497. 滑尺是 UI 小部件,用来在给定范围内选择数值的,这两个一个是水平的,一个是垂直的。
  498. </para>
  499. <para>
  500. 至少,它们需要 dijit 参数
  501. 'minimum'、 'maximum' 和 'discreteValues',来定义值的范围。
  502. 其它通用的选项有:
  503. </para>
  504. <itemizedlist>
  505. <listitem><para>
  506. 'intermediateChanges' 用来表明当 handle 被拖的时候是否需要发出 onChange 事件。
  507. </para></listitem>
  508. <listitem><para>
  509. 'clickSelect' 用来允许在滑尺上点击来设置其值。
  510. </para></listitem>
  511. <listitem><para>
  512. 'pageIncrement' 通过 pageUp 和 pageDown 来增加/减少值。
  513. </para></listitem>
  514. <listitem><para>
  515. 'showButtons' 设置来允许在滑尺的一端显示按钮来操作数值。
  516. </para></listitem>
  517. </itemizedlist>
  518. <para>
  519. Zend Framework 实现生成一个隐藏的元素来存储滑尺的数值。
  520. </para>
  521. <para>
  522. 你可以可选地为滑尺显示尺子或标签,可通过分配一个或多个 dijit 参数
  523. 'topDecoration' 和/或 'bottomDecoration'(水平滑尺) 或 'leftDecoration' 和/或
  524. 'rightDecoration' (垂直滑尺)来完成。它们有下列选项:
  525. </para>
  526. <itemizedlist>
  527. <listitem><para>
  528. <emphasis>container</emphasis>:容器名称。
  529. </para></listitem>
  530. <listitem><para>
  531. <emphasis>labels</emphasis> (可选):标签数组。
  532. 在滑尺的一端使用空字符串只为内部值提供标签。
  533. 当指定一个 'Labels' dijit 变量时必需。
  534. </para></listitem>
  535. <listitem><para>
  536. <emphasis>dijit</emphasis> (可选):
  537. HorizontalRule、HorizontalRuleLabels、 VerticalRule 或
  538. VerticalRuleLabels 中的一个,缺省为尺子 dijits 之一。
  539. </para></listitem>
  540. <listitem>
  541. <para>
  542. <emphasis>params</emphasis> (可选):
  543. 配置尺子 dijit 的 dijit 参数,参数规范包括:
  544. </para>
  545. <itemizedlist>
  546. <listitem><para>
  547. <emphasis>container</emphasis> (可选):
  548. 尺子容器的属性和参数的数组。
  549. </para></listitem>
  550. <listitem><para>
  551. <emphasis>labels</emphasis> (可选):
  552. 标签列表容器的属性和参数的数组。
  553. </para></listitem>
  554. </itemizedlist>
  555. </listitem>
  556. <listitem><para>
  557. <emphasis>attribs</emphasis> (可选):
  558. 和尺子/标签一起使用的 HTML 属性,遵循 <code>params</code> 选项格式并
  559. 且是一个带有键 'container' 和 'labels' 的联合数组。
  560. </para></listitem>
  561. </itemizedlist>
  562. <programlisting role="php"><![CDATA[
  563. echo $view->horizontalSlider(
  564. 'foo',
  565. 1,
  566. array(
  567. 'minimum' => -10,
  568. 'maximum' => 10,
  569. 'discreteValues' => 11,
  570. 'intermediateChanges' => true,
  571. 'showButtons' => true,
  572. 'topDecoration' => array(
  573. 'container' => 'topContainer'
  574. 'dijit' => 'HorizontalRuleLabels',
  575. 'labels' => array(
  576. ' ',
  577. '20%',
  578. '40%',
  579. '60%',
  580. '80%',
  581. ' ',
  582. ),
  583. 'params' => array(
  584. 'container' => array(
  585. 'style' => 'height:1.2em; font-size=75%;color:gray;',
  586. ),
  587. 'labels' => array(
  588. 'style' => 'height:1em; font-size=75%;color:gray;',
  589. ),
  590. ),
  591. ),
  592. 'bottomDecoration' => array(
  593. 'container' => 'bottomContainer'
  594. 'labels' => array(
  595. '0%',
  596. '50%',
  597. '100%',
  598. ),
  599. 'params' => array(
  600. 'container' => array(
  601. 'style' => 'height:1.2em; font-size=75%;color:gray;',
  602. ),
  603. 'labels' => array(
  604. 'style' => 'height:1em; font-size=75%;color:gray;',
  605. ),
  606. ),
  607. ),
  608. )
  609. );
  610. ]]></programlisting>
  611. </listitem>
  612. <listitem>
  613. <para>
  614. <emphasis>NumberSpinner</emphasis>:dijit.form.NumberSpinner。
  615. 数字输入文本框,按钮用来增减值。
  616. </para>
  617. <para>
  618. 期望用于 dijit 参数 'constraints' 的联合数值或者键 'min'、'max' 和 'places'
  619. (这些也期望 constraints 参数的条目)。
  620. 'places' 可用于指示微调数的增加和减少的数值。
  621. </para>
  622. <programlisting role="php"><![CDATA[
  623. echo $view->numberSpinner(
  624. 'foo',
  625. 5,
  626. array(
  627. 'min' => -10,
  628. 'max' => 10,
  629. 'places' => 2,
  630. ),
  631. array(
  632. 'maxlenth' => 3,
  633. )
  634. );
  635. ]]></programlisting>
  636. </listitem>
  637. <listitem>
  638. <para>
  639. <emphasis>NumberTextBox</emphasis>:dijit.form.NumberTextBox。
  640. NumberTextBox 可选地依靠给定的限制以本地化方式格式化和显示数字条目,同时也校验数字条目。
  641. </para>
  642. <programlisting role="php"><![CDATA[
  643. echo $view->numberTextBox(
  644. 'foo',
  645. 5,
  646. array(
  647. 'places' => 4,
  648. 'type' => 'percent',
  649. ),
  650. array(
  651. 'maxlength' => 20,
  652. )
  653. );
  654. ]]></programlisting>
  655. </listitem>
  656. <listitem>
  657. <para>
  658. <emphasis>PasswordTextBox</emphasis>:
  659. 和密码输入相关的 dijit.form.ValidationTextBox。
  660. PasswordTextBox 生成密码输入,并和当前的 dijit 主题匹配,同时也做客户端校验。
  661. </para>
  662. <programlisting role="php"><![CDATA[
  663. echo $view->passwordTextBox(
  664. 'foo',
  665. '',
  666. array(
  667. 'required' => true,
  668. ),
  669. array(
  670. 'maxlength' => 20,
  671. )
  672. );
  673. ]]></programlisting>
  674. </listitem>
  675. <listitem>
  676. <para>
  677. <emphasis>RadioButton</emphasis>:dijit.form.RadioButton。
  678. 一组选项,但只能选一个,除了视觉上和其它 dijits 保持一致,
  679. 其它方面都和普通的单选(radio,也叫无线电按钮)元素一样。
  680. </para>
  681. <para>
  682. RadioButton 接受可选的第五个参数,<code>$options</code>,
  683. 是个联合数组,值/标签对用作radio选项。
  684. 你可以以 <code>$attribs</code> 键 <code>options</code> 来传递。
  685. </para>
  686. <programlisting role="php"><![CDATA[
  687. echo $view->radioButton(
  688. 'foo',
  689. 'bar',
  690. array(),
  691. array(),
  692. array(
  693. 'foo' => 'Foo',
  694. 'bar' => 'Bar',
  695. 'baz' => 'Baz',
  696. )
  697. );
  698. ]]></programlisting>
  699. </listitem>
  700. <listitem>
  701. <para>
  702. <emphasis>SubmitButton</emphasis>:和提交元素相关的 dijit.form.Button。
  703. 参见按钮视图助手有更多的细节。主要的区别是这个按钮可以提交一个表单。
  704. </para>
  705. </listitem>
  706. <listitem>
  707. <para>
  708. <emphasis>Textarea</emphasis>:dijit.form.Textarea.
  709. 除了有很多行以外,和普通的文本区域一样,它们按照用户类型来扩展。
  710. 宽度通过风格来设定。
  711. </para>
  712. <programlisting role="php"><![CDATA[
  713. echo $view->textarea(
  714. 'foo',
  715. 'Start writing here...',
  716. array(),
  717. array('style' => 'width: 300px;')
  718. );
  719. ]]></programlisting>
  720. </listitem>
  721. <listitem>
  722. <para>
  723. <emphasis>TextBox</emphasis>:dijit.form.TextBox。
  724. 该元素主要用来在不同的 dijit 元素之间提供一个通用的外观,
  725. 并对其它 TextBox 派生的类 (ValidationTextBox、 NumberTextBox、 CurrencyTextBox、
  726. DateTextBox 和 TimeTextBox)提供基本功能。
  727. </para>
  728. <para>
  729. 普通的 dijit 参数标志包括 'lowercase' (转换成小写)、
  730. 'uppercase' (转换成大写)、
  731. 'propercase' (转换成合适的大小写)和 trim (修剪引导和拖尾的空白字符);
  732. 它们都接受布尔值。另外,你可以指定参数 'size' 和 'maxLength'。
  733. </para>
  734. <programlisting role="php"><![CDATA[
  735. echo $view->textBox(
  736. 'foo',
  737. 'some text',
  738. array(
  739. 'trim' => true,
  740. 'propercase' => true,
  741. 'maxLength' => 20,
  742. ),
  743. array(
  744. 'size' => 20,
  745. )
  746. );
  747. ]]></programlisting>
  748. </listitem>
  749. <listitem>
  750. <para>
  751. <emphasis>TimeTextBox</emphasis>: dijit.form.TimeTextBox。
  752. 也包含在 TextBox 家族,TimeTextBox 提供一个下拉式时间选择器。
  753. Dijit 参数让你指定可用的时间增量以及有效的时间的可见范围。
  754. </para>
  755. <programlisting role="php"><![CDATA[
  756. echo $view->timeTextBox(
  757. 'foo',
  758. '',
  759. array(
  760. 'am.pm' => true,
  761. 'visibleIncrement' => 'T00:05:00', // 5-minute increments
  762. 'visibleRange' => 'T02:00:00', // show 2 hours of increments
  763. ),
  764. array(
  765. 'size' => 20,
  766. )
  767. );
  768. ]]></programlisting>
  769. </listitem>
  770. <listitem>
  771. <para>
  772. <emphasis>ValidationTextBox</emphasis>:dijit.form.ValidateTextBox。
  773. 为文本元素提供客户端校验。从 TextBox 继承。
  774. </para>
  775. <para>
  776. 普通的 dijit 参数包括:
  777. </para>
  778. <itemizedlist>
  779. <listitem><para>
  780. <emphasis>invalidMessage</emphasis>:当检测到一个无效的输入,就显示一条消息。
  781. </para></listitem>
  782. <listitem><para>
  783. <emphasis>promptMessage</emphasis>:工具提示帮助信息。
  784. </para></listitem>
  785. <listitem><para>
  786. <emphasis>regExp</emphasis>:用于校验文本的正则表达式,不需要边界记号。
  787. </para></listitem>
  788. <listitem><para>
  789. <emphasis>required</emphasis>:确定元素是否必需。如果需要就把元素嵌入
  790. dijit.form.Form,它将被标记为无效并防止提交。
  791. </para></listitem>
  792. </itemizedlist>
  793. <programlisting role="php"><![CDATA[
  794. echo $view->validationTextBox(
  795. 'foo',
  796. '',
  797. array(
  798. 'required' => true,
  799. 'regExp' => '[\w]+',
  800. 'invalidMessage' => 'No spaces or non-word characters allowed',
  801. 'promptMessage' => 'Single word consisting of alphanumeric characters and underscores only',
  802. ),
  803. array(
  804. 'maxlength' => 20,
  805. )
  806. );
  807. ]]></programlisting>
  808. </listitem>
  809. </itemizedlist>
  810. </sect3>
  811. </sect2>
  812. <!--
  813. vim:se ts=4 sw=4 et:
  814. -->