2012-03-27 20 views
0

私はブロックモジュールで作業しており、ファイルがmanaged_fileフィールドを介してアップロードされたときに構成フォームでajax操作を実行したいと考えています。ajaxコールバック関数内でフォーム状態にアクセスする方法

したがって、managed_file隠しフィールドが変更されると(ファイルが正常にアップロードされると)、ajaxコールバックが発生します。 (/ block_video/update_video)の上に登録されたDrupalのパスは、私が現在の状態(初期ではない)とのブロック構成の$ form_state変数を取得したい関数を呼び出し

function updateVideo($action){ 
(function ($) { 
    $.ajax({ 
     url: '/block_video/update_video', // drupal menu path 
     dataType: 'json', 
     type: 'POST', 
     data: { 'action' : $action }, 
     success: function(data){ 
      // @ TODO 
     } 
    }); 
})(jQuery); 
} 

:AJAXは、このように呼ばれています。現在のブロック設定フォームの状態をJavaScriptを直接使用することなくページを更新することなく表示することは可能ですか?

私はmanaged_fileで '#ajax'プロパティを使うのが簡単ですが、それはありません。そこで、上記のajaxコールバックをmanaged_fileの隠し要素の値の変更を待つことで追加しました。この部分はここではhttp://forum.jquery.com/topic/adding-a-change-event-on-a-hidden-fieldのメソッドを使用して動作しています。

カスタムajaxコールバックで$ form_stateを取得できるはずです。 FAPI [#ajax] [callback](両方とも$ form & $ form_stateがコールバックパラメータに渡されます - 私はコールバックに渡された現在の$ form_stateしか必要ではありません)私はそれがDrupalによってどのように行われたのか理解できませんでした。

たぶん誰かが...偶然

おかげで私を助けることができます。その隠しフィールドの状態変化が、私は現在のフォームの状態を取得する際に、直接、 私は#ajaxコールバックの外側form_statesを取得するための任意の解決策を見つけることができませんでした:

答えて

0

さてさて、私はそれがすぐにので、ここで答えを、それを求めた後、固定しました純粋なjQuery ajax関数から。

トピックはありませんが関連性があります:私は通常のFAPI #ajax phpコールバックの中でform_statesを管理しました。カスタムjsを直後に呼び出す必要があったため、以下のメソッドで2番目のajaxコールバックまたは単に関数。あなたがDrupalの7 #ajaxコールバックから任意のJavaScript関数を呼び出すことができます。このコマンドで

// Code inside the FAPI #ajax callback : 
    // Trigger the function $.fn.ajaxTrigger defined in my js file. 
    $commands[] = ajax_command_invoke(NULL, 'ajaxTrigger'); 
    return array(
    '#type' => 'ajax', 
    '#commands' => $commands, 
); 

:それは、この方法を行っています。

関連する問題