it-swarm.com.de

Einfach AJAX Rückruf beim Klicken auf die Schaltfläche zum Senden des Formulars ausgelöst

Ich versuche, einen Rückruf AJAX] auszulösen, wenn der Benutzer die Senden-Taste drückt. Dies ist so einfach, aber ich versuche, Drupals Formular zu debuggen AJAX API fährt Ich bin verrückt. Zu diesem Zeitpunkt brauche ich nur ein paar neue Augen, um darüber zu schauen. Derzeit wird die Seite beim Drücken der Taste nur aktualisiert und der Rückruf AJAX] wird nie ausgelöst. Ich habe eine Das Formular wird mit dem folgenden Code erstellt:

class OnlineRevenueForm extends FormBase {
  public function buildForm(array $form, FormStateInterface $form_state) {
    $form['resetbutton'] = array(
        '#type' => 'submit',
        '#value' => $this->t('Submit'),
        '#prefix' => '<div class="buttons">',
        '#suffix' => '</div>',
        '#ajax' => array(
            'callback' => 'Drupal\revenue_projection_model\Controller\RPMController::ResetFields',
            'event' => 'click',
            'progress' => array(
                'type' => 'throbber',
                'message' => NULL,
            ),
        )
    );
    return $form;
  }

  public function submitForm(array &$form, FormStateInterface $form_state) {
    $form_state->setRebuild(FALSE);
  }
}

In meinem Controller lade ich dieses Formular mit dem folgenden Code:

class RPMController extends ControllerBase implements ContainerInjectionInterface {
 public function rpm() {
    // Load the module's template file
    $TemplateFilePath = drupal_get_path('module', 'revenue_projection_model') . "/templates/revenue_projection_model.html.twig";
    $template = $this->twig->loadTemplate($TemplateFilePath);
    //Load Forms
    $OnlineRevForm = \Drupal::formBuilder()->getForm('Drupal\revenue_projection_model\Form\OnlineRevenueForm');
        $markup = [
         '#type' => 'inline_template',
         '#template' => $template->render(
            ['online_rev_form' => $OnlineRevForm]
         )
        ];
   return $markup;
 }

Dieses Formular wird dann über die Vorlagendatei twig) angezeigt. Der Rückruf, den ich aufzurufen versuche, befindet sich auch im Controller:

public static function ResetFields(array &$form, FormStateInterface $form_state) {
     $ajax_response = new AjaxResponse();
     $ajax_response -> addCommand(new AlertCommand("Testing"));
     return $ajax_response;
}

pdate 1 : Ich habe aktualisiert, wie das Formular im Controller zurückgegeben wird. Es wird jetzt als nicht gerendertes Formular in einem Render-Array zurückgegeben.

public function rpm() {
  $OnlineRevForm = \Drupal::formBuilder()->getForm('Drupal\revenue_projection_model\Form\OnlineRevenueForm');
  return [
        '#theme' => 'rpm_page',
        '#online_rev_form' => $OnlineRevForm
  ];
}

Ich habe diesen Code auch zur .module-Datei hinzugefügt:

function revenue_projection_model_theme() {
  $theme['rpm_page'] = [
    'variables' => ['online_rev_form' => NULL],
    'template' => 'revenue_projection_model',
  ];

  return $theme;
}
1
iWig

Sie benötigen auch eine Übermittlungsfunktion.

Sie können einen Blick darauf werfen hier . Es ist ein vollständiges Beispiel mit Submit-Handler und Rückruf. In diesem Fall habe ich das Formular geändert, da ich es nicht erstellt habe, es ist aber ziemlich ähnlich. Auch ein wirklich schöner Beitrag ist hier

1
Ismini