Điểm:1

Làm cách nào để tải lại biểu mẫu gắn cờ qua ajax?

lá cờ in

Nhiệm vụ của tôi là ajaxify biểu mẫu cờ phức tạp (với các trường bổ sung). Tôi cần điều này vì cờ ajax mặc định không hỗ trợ các trường dữ liệu. Tôi cần có biểu mẫu gắn cờ để tạo cờ và sau đó cập nhật biểu mẫu đó khi việc gắn cờ đã được tạo.

Tôi muốn đặt biểu mẫu ajaxified gắn cờ tùy chỉnh trong mẫu của mình Đầu tiên tôi xây dựng biểu mẫu:

$term = $variables['term'];
$flag = \Drupal::service('flag')->getFlagById('subscribe_term');
$flagging_entity = \Drupal::service('flag')->getFlagging($flag, $variables['term']);

nếu (!$flagging_entity) {
  $flagging_entity = \Drupal::entityTypeManager()->getStorage('flagging')->create([
    'uid' => \Drupal::currentUser()->id(),
    'session_id' => NULL,
    'flag_id' => $flag->id(),
    'entity_id' => $term->id(),
    'entity_type' => $term->getEntityTypeId(),
    'toàn cầu' => $flag->isGlobal(),
  ]);
}

$form = \Drupal::entityTypeManager()
    ->getFormObject('gắn cờ', 'chỉnh sửa')
    ->setEntity($flagging_entity);

$variables['flag'] = \Drupal::formBuilder()->getForm($form);

Hình thức hoạt động ok.

Sau đó, tôi thay đổi biểu mẫu quảng cáo thêm gọi lại ajax:

$form['actions']['submit']['#ajax'] = [
  'gọi lại' => 'mymodule_flag_form_ajax_callback',
  'hiệu ứng' => 'mờ dần',
];

Và sau đó trong cuộc gọi lại ajax tôi cố gắng để có được hình thức tương tự:

$render_selector = ".flag-form-wrapper";
$response = new AjaxResponse();
$form_object = $form_state->getFormObject();
$flagging_entity = $form_object->getEntity();

$flagged_entity_field = $flagging_entity->get('flagged_entity')->getValue();

nếu ($flagged_entity_field) {
  $tid = $flagged_entity_field[0]['target_id'];
  $term = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->load($tid);

  nếu ($thuật ngữ) {
    $flag = \Drupal::service('flag')->getFlagById('subscribe_term');
    $flagging_entity = \Drupal::service('flag')->getFlagging($flag, $term);

    nếu (!$flagging_entity) {
      $flagging_entity = \Drupal::entityTypeManager()->getStorage('flagging')->create([
        'uid' => \Drupal::currentUser()->id(),
        'session_id' => NULL,
        'flag_id' => $flag->id(),
        'entity_id' => $term->id(),
        'entity_type' => $term->getEntityTypeId(),
        'toàn cầu' => $flag->isGlobal(),
      ]);
    }

    $form_new = \Drupal::entityTypeManager()
        ->getFormObject('gắn cờ', 'chỉnh sửa')
        ->setEntity($flagging_entity);
    $form_build = \Drupal::formBuilder()->getForm($form_new);

    $response->addCommand(new HtmlCommand($render_selector, $form_build));
  }
}

nhưng tôi nhận được ngoại lệ sau: FormAjaxException

Vậy tôi đang làm gì sai và cách làm mới biểu mẫu bằng ajax?

Jaypan avatar
lá cờ de
Bạn không thể thêm các phần tử biểu mẫu trong một lệnh gọi lại ajax - điều đó sẽ bao gồm toàn bộ biểu mẫu. Có thể mô-đun này có thể trợ giúp: https://www.drupal.org/project/ajaxifyforms

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.