Wie rendere ich ein Formular in einem Div durch einen Javascript-Aufruf?

Sep 24 2020

Ich versuche, ein Formular mit einem Javascript-Aufruf in ein div zu laden. Ich kann das Formular im div erhalten, aber nichts funktioniert (Felder für die automatische Vervollständigung, wysiwyg-Felder, benutzerdefinierter Submit-Handler).

Ich weiß, dass mir etwas fehlen muss, aber ich kann nicht herausfinden, was es ist.

Was ich jetzt habe, um das Formular zu bekommen:

$form = \Drupal::formBuilder()->getForm('Drupal\my_module\Form\MyForm'); $renderable = [
   '#theme' => 'my_form',
   '#form' => $form, ]; $rendered = Drupal::service('renderer')->renderPlain($renderable); $response = new AjaxResponse();
$response->setData($rendered);
return $response;

Ich habe auch versucht , renderRootstatt renderPlain, aber ohne Erfolg.

Die Zweigdatei sieht folgendermaßen aus (sehr einfach):

<div id="form-container">
    {% include 'header.html.twig' with {
        type : 'manual'
    } %}
    <div class="content">
        {{ form }}
    </div>
</div>

Jede Hilfe wird sehr geschätzt.

Antworten

4 4k4 Sep 24 2020 at 13:22

Sie müssen der Ajax-Antwort Ajax-Befehle hinzufügen, indem Sie das nicht gerenderte Render-Array verwenden:

$response->addCommand(new ReplaceCommand('#form-container', $renderable));

Übrigens können Sie eine Drupal-Ajax-Antwort nur zurückgeben, wenn Sie eine Ajax-Anfrage über ausgelöst haben ajax.js. Außerhalb von Formularübermittlungen tun Sie dies normalerweise, indem Sie die Klasse use-ajaxeinem Link hinzufügen . Benutzerdefinierten JS-Code finden Sie unter Auslösen vorhandener, nicht formularer Ajax aus einem JavaScript-Ereignis