【问题标题】:Dojo Form Submit WoesDojo 表单提交问题
【发布时间】:2012-07-09 18:16:46
【问题描述】:

所以这就是问题所在。我们有一些使用 Zend_Dojo_Form 创建的大型 dojo 表单。问题是验证在每个元素上工作时,对任何提交按钮都不起作用。由于标准布局的不灵活性,我们不得不使用视图脚本。

我以为我的整个工作都很好,直到我需要确保当您使用快速链接从一个页面转到多页表单的页面时,它提交了当前页面(带有验证)。

我注意到,当我在提交按钮上强制触发 click 事件时,没有发生验证(或者更确切地说,如果存在无效值,则不会阻止表单提交。这些值只是没有提交。)

所以我查看了一些教程,发现表单是通过调用来验证的

dijit.byId('form-id').validate();

或我正在寻找的捷径,主要是(最初)

dijit.byId('form-id').submit();

这两个都不是函数,因为 byId 返回的是未定义的。这意味着我们的视图脚本 - 或者无论整个过程是什么 - 使用 Zend 生成 dojo 表单无论如何都是部分巫术 - 实际上并不生成 dojo 表单 dijit。

那么如何在视图脚本中做到这一点?例如,什么样的 php 调用或属性会附加到表单标记以使其被 Dojo 解释为表单 dijit 的基础?

这是来自视图脚本的代码:

<form action="<?= $this->escape($this->element->getAction()) ?>"
      method="<?= $this->escape($this->element->getMethod()) ?>"
      id="case-record-form">

【问题讨论】:

  • 你在使用dojo视图助手吗?
  • ,是的。加上用 class='nihilo' 将整个东西包装在一个 div 中。我敢肯定,如果没有它,这些字段甚至不会单独验证。
  • 我只需要知道在我的视图脚本开头需要调用什么,以确保创建的表单被解释为定义 dijit...现在它没有。跨度>
  • 似乎 Zend 正在某个地方创建一个 zenddijits 列表,该列表是一个使用 mixin() 解析的数组 - 我可以在我的视图脚本中调用什么函数来确保将表单容器本身添加到此列表中?有人有什么想法吗?
  • 有人吗?这是关键任务。

标签: forms zend-framework dojo dijit.form


【解决方案1】:

这听起来与我遇到的问题非常相似。如果我通过回显表单来呈现表单,则验证有效,但在使用视图脚本时不会。我发现在使用 viewscript 时,Zend 不会将表单添加到它的 zendDijits 数组中,所以您必须手动完成。

添加类似:

$script = 'zendDijits.push({"id":"MyFormId","params":{"dojoType":"dijit.form.Form"}})';
$this->headScript()->appendScript($script);

在视图脚本的顶部。

【讨论】:

  • 我做的一件事是不要将表单放入视图脚本中并执行此操作:` $this->setDecorators(array( array('ViewScript', array('viewScript' => '[ form].phtml')), 'DijitForm', ));` 这导致它渲染视图脚本并将其包装在 DijitForm 中。
猜你喜欢
  • 2010-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-13
  • 2015-07-09
  • 2021-12-14
  • 2018-01-19
  • 1970-01-01
相关资源
最近更新 更多