0

ここで問題です。Zend_Dojo_Form を使用して作成された大きな Dojo フォームがいくつかあります。問題は、検証が要素ごとに機能しているのに、どの送信ボタンでも機能しないことです。標準レイアウトは柔軟性がないため、ビュースクリプトを使用せざるを得ません。

クイックリンクを使用してマルチページフォームのページからページに移動したときに、現在のページを送信したことを確認する必要があるまでは、すべてが正常に機能していると思いました (検証あり)。

送信ボタンでクリックイベントを強制的に発生させたときに、検証が行われていないことに気付きました (または、無効な値がある場合にフォームの送信を妨げていませんでした。それらの値は送信されませんでした)。

そこで、フォームが呼び出しによって検証されることがわかったいくつかのチュートリアルを見ました

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

または、主に(もともと)探していたショートカット

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

byId は undefined を返すため、どちらも関数ではありません。これが意味するのは、私たちのビュースクリプトです - またはプロセス全体が何であれ - Zend で dojo フォームを生成することはとにかく部分的にブードゥーです - 実際には dojo フォーム dijit を生成しません。

では、ビュースクリプトでこれを行うにはどうすればよいでしょうか? 例えば、Dojo によってフォーム dijit の基礎となるように解釈されるようにするには、フォーム タグにどのような種類の php 呼び出しまたは属性を付加すればよいでしょうか?

ビュースクリプトのコードは次のとおりです。

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

1 に答える 1

2

これは、私が抱えていた問題と非常によく似ています。エコーしてフォームをレンダリングすると、検証は機能しましたが、ビュースクリプトを使用すると機能しませんでした。ビュースクリプトを使用すると、Zend はフォームを zendDijits 配列に追加しないため、手動で行う必要があることがわかりました。

次のようなものを追加します。

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

ビュースクリプトの上部にあります。

于 2012-08-09T18:47:55.313 に答える