Tôi có một biểu mẫu với một nút mà khi nhấn sẽ xây dựng lại một phần khác của biểu mẫu thông qua yêu cầu ajax.
Khi nhấp vào nút, biểu mẫu được xây dựng lại, sau đó cuộc gọi lại ajax của tôi được gọi để lưu các giá trị từ biểu mẫu và sau đó trả về một phần của biểu mẫu.
Vấn đề là biểu mẫu được xây dựng lại TRƯỚC KHI gọi lại của tôi để lưu các giá trị và thay đổi cách thức biểu mẫu được tạo.
Nếu tôi nhấp vào nút ajax lần thứ hai thì nó hoạt động chính xác như có các giá trị từ yêu cầu ajax trước đó khi biểu mẫu được xây dựng.
Làm cách nào để chức năng gọi lại của tôi chạy trước khi biểu mẫu được xây dựng lại?
function emtr_shift_plan_form($form, &$form_state) {
ddl('build'); // log that this function is being called
$form['save'] = array(
'#type' => 'button',
'#submit' => array('emtr_shift_plan_form_ajax_submit'),
'#value' => 'Save',
'#ajax' => array(
'callback' => 'emtr_shift_plan_form_ajax_submit',
'wrapper' => 'postions',
),
'#id' => 'ajax-save-form-values',
);
$form['postions'] = array(
'#type' => ' container',
'#prefix' => '<div id="postions">',
'#suffix' => '</div>',
);
// code here to populate the positions container
}
function emtr_shift_plan_form_ajax_submit($form, &$form_state) {
ddl('ajax submit'); // log the ajax callback is being called
$form_state['rebuild'] = TRUE; // As the form has already been rebuilt at this point what effect can this have?!?
emtr_shift_plan_form_save($form, $form_state); // save the values
// This is the point at which I want the form to be rebuilt
return $form['positions'];
}
BIÊN TẬP:
Như một giải pháp thay thế, tôi thấy có thể tự xây dựng lại biểu mẫu lần thứ hai trong cuộc gọi lại ajax với $form = drupal_rebuild_form('emtr_shift_plan_form', $form_state);
, nhưng dường như không hiệu quả khi xây dựng biểu mẫu hai lần. Tôi có thể trao đổi thứ tự của các sự kiện này thay vì có biểu mẫu xây dựng hai lần cho mỗi yêu cầu ajax không?