Score:1

จะโหลดแบบฟอร์มการตั้งค่าสถานะซ้ำผ่าน ajax ได้อย่างไร

ธง in

งานของฉันคือสร้าง ajaxify แบบฟอร์มแฟล็กที่ซับซ้อน (พร้อมฟิลด์เพิ่มเติม) ฉันต้องการสิ่งนี้เนื่องจากแฟล็ก ajax เริ่มต้นไม่รองรับ fiedls ฉันต้องมีแบบฟอร์มการแฟล็กสำหรับสร้างการแฟล็กและอัปเดตเมื่อสร้างการแฟล็กแล้ว

ฉันต้องการวางแบบฟอร์ม ajaxified ตั้งค่าสถานะแบบกำหนดเองในเทมเพลตของฉัน ก่อนอื่นฉันได้รับการสร้างแบบฟอร์ม:

$term = $ตัวแปร['term'];
$flag = \Drupal::service('flag')->getFlagById('subscribe_term');
$flagging_entity = \Drupal::service('flag')->getFlagging($flag, $variables['term']);

ถ้า (!$flagging_entity) {
  $flagging_entity = \Drupal::entityTypeManager()->getStorage('ตั้งค่าสถานะ')->สร้าง([
    'uid' => \Drupal::currentUser()->id(),
    'session_id' => โมฆะ,
    'flag_id' => $flag->id(),
    'entity_id' => $term->id(),
    'entity_type' => $term->getEntityTypeId(),
    'ทั่วโลก' => $flag->isGlobal(),
  ]);
}

$form = \Drupal::entityTypeManager()
    ->getFormObject('การตั้งค่าสถานะ', 'แก้ไข')
    ->setEntity($flagging_entity);

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

ฟอร์มใช้ได้เลย

จากนั้นฉันแก้ไขแบบฟอร์มโฆษณาเพิ่ม ajax callback:

$form['actions']['submit']['#ajax'] = [
  'callback' => 'mymodule_flag_form_ajax_callback',
  'เอฟเฟกต์' => 'จาง',
];

จากนั้นในการโทรกลับ ajax ฉันพยายามรับแบบฟอร์มเดียวกัน:

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

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

ถ้า ($ flagged_entity_field) {
  $tid = $flagged_entity_field[0]['target_id'];
  $term = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->load($tid);

  ถ้า ($ คำ) {
    $flag = \Drupal::service('flag')->getFlagById('subscribe_term');
    $flagging_entity = \Drupal::service('flag')->getFlagging($flag, $term);

    ถ้า (!$flagging_entity) {
      $flagging_entity = \Drupal::entityTypeManager()->getStorage('ตั้งค่าสถานะ')->สร้าง([
        'uid' => \Drupal::currentUser()->id(),
        'session_id' => โมฆะ,
        'flag_id' => $flag->id(),
        'entity_id' => $term->id(),
        'entity_type' => $term->getEntityTypeId(),
        'ทั่วโลก' => $flag->isGlobal(),
      ]);
    }

    $form_new = \Drupal::entityTypeManager()
        ->getFormObject('การตั้งค่าสถานะ', 'แก้ไข')
        ->setEntity($flagging_entity);
    $form_build = \Drupal::formBuilder()->getForm($form_new);

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

แต่ฉันได้รับข้อยกเว้นต่อไปนี้: FormAjaxException

ฉันทำอะไรผิดและจะรีเฟรชแบบฟอร์มโดยใช้ ajax ได้อย่างไร

Jaypan avatar
de flag
คุณไม่สามารถเพิ่มองค์ประกอบแบบฟอร์มในการเรียกกลับของ ajax ซึ่งจะรวมถึงแบบฟอร์มทั้งหมด บางทีโมดูลนี้อาจช่วยได้: https://www.drupal.org/project/ajaxifyforms

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา