2

日付範囲を挿入する Zend フォームを作成しています。フォームは jQuery UI ライブラリを使用して拡張されているため、日付の開始フィールドと日付の終了フィールドがあり、どちらも日付ピッカー要素です。これは正常に機能しています。これが Zend_Form のこの部分です。

  // Date range
  $date = $this->getView()->date(time());
  $this->addElement('DatePicker', 'userday_from', array(
     'label'        => 'Datum van',
     'value'        => $date,
     'jQueryParams' => array(
        'defaultDate' => $date,
        'dateFormat'  => $this->getView()->date()->getFormatJquery()
     )
  ));
  $this->addElement('DatePicker', 'userday_to', array(
     'label'        => 'Datum tot',
     'value'        => $date,
     'jQueryParams' => array(
        'defaultDate' => $date,
        'dateFormat'  => $this->getView()->date()->getFormatJquery()
     )
  ));

最初の日付が変更されたら、2 番目の日付を更新したいと考えています。jQuery datepicker には、このための onSelect イベントがあります。ただし、jQueryParams に関数コールバックを追加できません。

  $this->addElement('DatePicker', 'userday_from', array(
     'label'        => 'Datum van',
     'value'        => $date,
     'jQueryParams' => array(
        'defaultDate' => $date,
        'dateFormat'  => $this->getView()->date()->getFormatJquery(),
        'onSelect'  => "function(){ alert('test'); }"   // ! is not working
     )
  ));

したがって、このjQueryの「オプション」を後で次のように追加しようとします:

  $this->getView()->jQuery()
     ->addOnload("
        $('#userday_from').datepicker('option', 'onSelect', function(selectedDate){
           alert('test');
        });
     ");

一方、これは、私のdatepicker要素の初期化関数の前に、 document.ready() 関数に新しいjQueryを追加するため、どちらも機能しません:

<script type="text/javascript">//<![CDATA[
$(document).ready(function() {
            $('#userday_from').datepicker('option', 'onSelect', function(selectedDate){
               alert('test');
            });
    $("#userday_from").datepicker({"defaultDate":"09-11-2012","dateFormat":"dd-mm-yy"});
    $("#userday_to").datepicker({"defaultDate":"09-11-2012","dateFormat":"dd-mm-yy"});
});
//]]></script>

このようなものをハックするために、datePicker ビューヘルパーを上書きしたくありません。これは 2 つのフォーム要素を結び付けるためのものなので、Zend_Form の init() 関数に追加することは有効に思えます。

4

2 に答える 2

1

古い質問ですが、Zend で関数コールバックを使用するには Zend_Json_Expr を使用します

あなたの場合:

'onSelect'  => new Zend_Json_Expr("function(){ alert('test'); }")
于 2013-12-30T11:10:15.353 に答える
0

これはおそらくあなたの問題を本当に解決しないでしょう。しかし、それがあなたに正しい方向を示してくれることを願っています。Benjaminがここで指摘したように、ZendXjQueryは廃止されます。彼はまた、ZFからjQueryコードを生成することが良い考えではない理由を指摘しています。私は個人的にベンジャミンに完全に同意します。

ZendX_Jqueryは、デフォルトで不正なコードを生成します。悪いコードを生成するだけでなく、実際に何をしているのか、つまりどのコードが生成されるのかを考えるのをやめさせます。さらに、「インライン」コードを生成します。つまり、HTMLコードに直接埋め込まれているため、ユーザーのブラウザによってキャッシュされないjavascriptコードを生成します。実際、目立たないjavascriptコードが生成されるかどうかさえわかりません。

すべてをまとめると、ZendX_JQueryの使用をスキップすることを強くお勧めします。

さようなら、クリスチャン

于 2012-11-27T17:34:12.013 に答える