Dojo 视图助手Zend Framework 提供下列 Dojo-specific 视图助手:
Example #1 使用 Dojo 视图助手
为了使用 Dojo 视图助手,你需要告诉视图对象到哪里去找它们,调用
$view->addHelperPath('Zend/Dojo/View/Helper/', 'Zend_Dojo_View_Helper');
另外,你也可以使用 Zend_Dojo::enableView($view); dojo() 视图助手
Example #2 dojo() 视图助手用法范例 对本范例,假设开发者将从本地路径使用 Dojo 表单,需要请求若干个 dijits, 并将使用 Tundra dijit 主题。 在许多页面上,开发者可能根本不使用 Dojo。所以,我们集中精力在需要 Dojo 的视图脚本上, 然后是布局脚本,在那里,我们将设置一个 Dojo 环境和解析它。 首先,我们需要告诉视图对象使用 Dojo 视图助手路径。这可以在引导文件里或早期运行的插件里做; 简单地抓取你的视图对象并执行下列代码: $view->addHelperPath('Zend/Dojo/View/Helper/', 'Zend_Dojo_View_Helper'); 接着是视图脚本。在本例中,我们打算指定使用 FilteringSelect - 它需要基于 QueryReadStore 的定制的存储, 我们将调用 'PairedStore' 并存储到我们的 'custom' 模块。 <? // setup data store for FilteringSelect ?> <div dojoType="custom.PairedStore" jsId="stateStore" url="/data/autocomplete/type/state/format/ajax" requestMethod="get"></div> <? // Input element: ?> State: <input id="state" dojoType="dijit.form.FilteringSelect" store="stateStore" pageSize="5" /> <? // setup required dojo elements: $this->dojo()->enable() ->setDjConfigOption('parseOnLoad', true) ->registerModulePath('../custom/') ->requireModule('dijit.form.FilteringSelect') ->requireModule('custom.PairedStore'); 在布局脚本中,我们接着检查是否开启了 Dojo,如果是,我们将做一些基本配置和组装: <?= $this->doctype() ?> <html> <head> <?= $this->headTitle() ?> <?= $this->headMeta() ?> <?= $this->headLink() ?> <?= $this->headStyle() ?> <? if ($this->dojo()->isEnabled()): $this->dojo()->setLocalPath('/js/dojo/dojo.js') ->addStyleSheetModule('dijit.themes.tundra'); echo $this->dojo(); ?> <?= $this->headScript() ?> </head> <body class="tundra"> <?= $this->layout()->content ?> <?= $this->inlineScript() ?> </body> </html> 在这点上,你只需要确保你的文件在正确的位置并且你已经为 FilteringSelect 创建了终点动作! Dojo 的 Programmatic 和 Declarative 用法Dojo 在其许多功能上使用 declarative 和 programmatic。 Declarative 用法使用标准的带有当页面加载时解析的非标准属性的 HTML 元素。 虽然强大并且语法简单,对大多数开发者来说,它在页面校验时容易出问题。 Programmatic 用法让开发者通过用ID或 CSS 选择器把它们来出来并解析 到合适的在 Dojo 里的对象构造器来装饰存在的元素。因为没有使用非标准 HTML 属性,页面可以继续校验。
在实践中,当禁止 javascript 或不能获取部分 Dojo 脚本资源,上述两个用例都考虑了完美的降级。
为提升标准和文档校验, Zend Framework 缺省使用 programmatic 用法,各种
视图助手将生成 javascript 并压到 用这个技术的开发者可能也想探索写自己的页面 programmatic 装饰器。 一个好处是可以指定 dijit 事件的句柄。 为使用此功能,同时也使用 declarative 语法,有许多静态方法可以全局使用。 Example #3 指定 Declarative 和 Programmatic Dojo 用法范例
为指定 declarative 用法,简单地调用静态方法
Zend_Dojo_View_Helper_Dojo::setUseDeclarative();
如果你决定使用 programmatic 用法,调用静态方法
Zend_Dojo_View_Helper_Dojo::setUseProgrammatic(); 最后,如果你想生成自己的 programmatic 规则,你应当指定 programmatic 用法, 但是传递值 '-1';在这种情况下,不生成用于装饰 dijit 的 javascript。 Zend_Dojo_View_Helper_Dojo::setUseProgrammatic(-1); 主题Dojo 允许为它的 dijits(小部件)生成主题。你可以通过传递模块路径来选择一个: $view->dojo()->addStylesheetModule('dijit.themes.tundra'); 模块路径通过使用字符 '.'作为目录分隔符和在主题目录里列表中最后的值作为CSS文件的名称来找出。 在上述例子中,Dojo 在 'dijit/themes/tundra/tundra.css' 中寻找主题。 当使用主题时,记住传递主题类很重要,至少,传递在你使用的 dijits 周围的容器; 最常用的用例是在 body 里传递它: <body class="tundra"> 使用 Layers (定制)缺省地,当你使用 dojo.require 语句,dojo 将请求服务器抓取适当的 javascript 文件。 如果你有许多 dijits ,将导致许多对服务器请求,- 这不是很理想。 Dojo 的解决方案是提供生成 定制 的能力,定制做如下事情:
有些文件不能被 layered,但定制处理将生成一个特别的目录来放 layer 文件和其它所有文件。 这会对你的站点或应用需求减少发行定制。
为了使用 layer, $view->dojo()->addLayer('/js/foo/foo.js'); 更多关于生成定制的信息,请 » refer 参考 Dojo 构造文档. 可用方法
Dijit-Specific 视图助手引用一下 Dojo 手册:“Dijit 是基于 dojo 之上的一个小部件系统”,Dijit 有 许多布局和表单小部件,用来提供访问、本地化和标准化(和可主题化)的观感。 Zend Framework 带有许多视图助手让你在视图脚本里解析和使用 dijits。有三个基本类型:
为了使用这些视图助手,你需要用视图对象来注册路径给 dojo 视图助手。 Example #4 注册 Dojo 视图助手前缀路径 $view->addHelperPath('Zend/Dojo/View/Helper', 'Zend_Dojo_View_Helper'); Dijit 布局元素dijit.layout 元素家族用来生成定制的、可预计的布局。任何关于用法的问题 » 请阅读 Dojo 手册。
所有的 dijit 布局元素都有签名
下列的抓取方法对所有的布局容器都可用:
Example #5 BorderContainer 布局 dijit 范例 BorderContainers, 特别是当和抓取内容耦合时,对复杂的布局效果特别有用。 $view->borderContainer()->captureStart('masterLayout', array('design' => 'headline')); echo $view->contentPane( 'menuPane', 'This is the menu pane', array('region' => 'top'), array('style' => 'background-color: darkblue;') ); echo $view->contentPane( 'navPane', 'This is the navigation pane', array('region' => 'left'), array('style' => 'width: 200px; background-color: lightblue;') ); echo $view->contentPane( 'mainPane', 'This is the main content pane area', array('region' => 'center'), array('style' => 'background-color: white;') ); echo $view->contentPane( 'statusPane', 'Status area', array('region' => 'bottom'), array('style' => 'background-color: lightgray;') ); echo $view->borderContainer()->captureEnd('masterLayout'); Dijit 表单元素Dojo 的表单校验和输入 dijit 在 dijit.form 树中。 更多关于这些元素的一般用法和可接受的参数,请 » 访问 dijit.form 文档.
下列 dijit 表单元素在 Zend Framework 里可用。
除非注明,都有签名
|