2017-01-02 9 views
1

Я создаю форму drupal с несколькими элементами формы, активированными ajax.Drupal 8 add ajax form element после ajax callback

У меня есть один список выбора, который выполняет обратный вызов ajax после изменения. Проблема в том, что он добавляет новый список выбора на страницу, который также включен ajax. Кажется, это не работает, что кажется логичным для меня, потому что ajax фактически связан с добавлением страницы, поэтому он потерян в команде replace.

Есть ли у кого-нибудь опыт с этим, и есть ли у кого-нибудь решение?

Это мой код

/** 
    * {@inheritdoc} 
    */ 
    public function buildForm(array $form, FormStateInterface $form_state) 
    { 
     $form['city'] = [ 
      '#type' => 'select', 
      '#title' => $this->t('Station'), 
      '#description' => $this->t('City'), 
      '#options' => array(
       'Aalst' => $this->t('Aalst'), 
       'Brussel' => $this->t('Brussel'), 
       'Hasselt' => $this->t('Hasselt'), 
       'Leuven' => $this->t('Leuven'), 
      ), 
      '#ajax' => [ 
       'callback' => array($this, 'extendFormAjax'), 
       'event' => 'change', 
       'progress' => array(
        'type' => 'throbber', 
        'message' => t('Choose City'), 
       ), 
      ], 
      '#suffix' => '<div id="extended-form"></div>', 
     ]; 

     $form['submit'] = [ 
      '#type' => 'submit', 
      '#value' => t('Submit'), 
     ]; 

     return $form; 
    } 

    /** 
    * Ajax callback to validate the email field. 
    */ 
    public function extendFormAjax(array &$form, FormStateInterface $form_state) 
    { 
     $parking = [ 
      '#type' => 'select', 
      '#title' => $this->t('Parking'), 
      '#description' => $this->t('Parking'), 
      '#options' => [ 
       'P1' => $this->t('P1'), 
       'P2' => $this->t('P2'), 
      ], 
      '#ajax' => [ 
       'callback' => array($this, 'extendFormAjax'), 
       'event' => 'change', 
       'progress' => array(
        'type' => 'throbber', 
        'message' => t('Choose parking'), 
       ), 
      ], 
     ]; 

     $response = new AjaxResponse(); 
     $response->addCommand(new InsertCommand('#extended-form', $parking)); 

     return $response; 
    } 
+0

Я испытываю эту же проблему, но пока не могу найти решение. –

ответ