2016-10-08 7 views
0

問題が発生しました.Yii2フレームワークを変更せずに問題を解決する最良の方法を探しています。JQuery yii-juiを使用したAjax更新後のソート可能な初期化

私は、並べ替えることができる要素を含むページを持っています。私はyii-juiのソート可能なウィジェットを使用していますが、最初のビューの後はすべて正常に動作します。

状況によっては、ajaxごとにすべての要素でコンテンツを更新する必要があります。これも機能しています。

問題は、ajax呼び出し後にコンテンツを更新すると、ソート可能な要素とそのコンテナのjquery初期化が失われることがあります。

最初のビューを作成するときに、yii-jui拡張子は、文書上で実行可能な関数内のJavascriptブロックにSortable要素を初期化するためのjavascriptを配置します。すでに述べたように、これは最初のビューでうまく機能します。しかし、コンテンツを更新すると初期化が失われ、何とかjavascriptの初期化を再度実行する必要があります。ドキュメント上で機能することができないため、私はこれを行うことができません。

ソート可能な要素のすべてのJS初期化を別の関数に配置し、最初のビューの後とajaxの更新後に明示的にコールすることが考えられます。難しいのは、yii-juiウィジェットですべての初期化(イベントとオプション)をドキュメント上の準備関数に単一の呼び出しとして配置するため、これを行う方法がないことです。

  • YII-JUIをするために、初期化を配置するウィジェットがJS関数に
  • はJS を操作するためのビューのイベントフックを使用して、手順のオプションを追加します。私は、次の考えられてきた

    バンドル/アセット設定を行うことができます。 必要な機能を作成する

  • yii-juiウィジェットのネイティブオプションを使用しないで、別のinitializat私自身のイオンスクリプト。

私はどのように最善を尽くすことができますか?任意の入力

アンディ・ポッター

答えて

0

ため

おかげで私は解決策を見つけました。

ビューに「フック」することによりEVENT_END_PAGEイベント私は生成されたJavascriptコードを変更し、それを関数に配置することができました。

ビューでインラインJavascriptが生成されると、すべての配列要素が一緒に畳み込まれます。だから私は関数宣言の中にコードを囲んだだけです。その後、後で利用可能になります。

重要

  • それがなければなりません.ready関数は jQueryの(ドキュメント)の範囲の外で利用できるようにするためには
  • を宣言された後、関数が明示的に呼び出す必要があります がグローバルスコープで宣言されている変数に割り当てられています。したがって、 という最初の2つの割り当ては<HEAD>領域に生成されます。あなたはすでにあなたのビューでのjQueryを持っていたよう
1

、あなたは(あなたがyii.jsのように、あまりにもいくつかの他のファイルを検討する可能性が)AJAXリクエストで再度読み込むからyii2を防ぐために必要があります。

$view->on(View::EVENT_END_PAGE, function($event){ 

    $positions = $event->sender->jsFiles; 
    foreach($positions as $position => $js){ 
     $new = array_filter($js, 
     function($item){ 
      return !preg_match('/jquery(\.min)?\.js|yii(\.min)?\.js/i', $item); 
     }); 
     $event->sender->jsFiles[$position] = $new; 
    } 

}); 

preg_matchパターンに追加することで、必要な数だけjsファイルをフィルタリングできます。

関連する問題