Ajax-ссылка в Drupal 8 не работает в режиме ветки - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь создать ссылки Ajax в шаблоне ветки (а не в форме) в Drupal 8 и столкнулся со странным явлением.

Мне удалось создать простую ссылку, которая открывает предупреждение.Это работает, когда я помещаю его в свой шаблон веточки в самый верх или низ разметки, поэтому я знаю, что мой маршрутизатор, контроллер и шаблон работают.
Однако, когда я помещаю точно такой же код в функцию ветки, он останавливаетсяработает правильно.Вместо всплывающего предупреждения возвращается json, но он отображается на новой странице, где нет ничего, кроме texarea, содержащего данные json.На странице нет информации о заголовке (только пустые теги) или какой-либо другой разметки.

Я также заметил, что размещение тега ссылки (<a href="...">) сразу после оператора функции открывающей ветки приводило к тому, что ссылка даже не отображаласьна странице.

Содержание Json:

[{"command":"alert","text":"Hello, Bob"}]

Итак, мой вопрос: почему это происходит и как я могу это исправить?

Мой файл ветки выглядит так:

<!-- This works -->
<a class="use-ajax" href="/custom_ajax_link/Bob"> open alert for ajax link testing </a>
{% for key, pos in players %}
    <div class="clearfix pos-title">{{ key }}
        <span class="positionCounts">({{ pos|length }})</span>
    </div>
    <div class="clearfix availablePlayers">
        {% for key, player in pos %}
            <!-- This doesn't even show up in the compiled source -->
            <a class="use-ajax" href="/custom_ajax_link/Bob">Details</a>
            <div data-position="{{ player.disp }}" class="player clickable draggable dragValid">
            <!-- This is rendered but doesn't work -->
            <a class="use-ajax" href="/custom_ajax_link/Bob">Details</a>
              <img class="pImage" src="{{ mod_path }}/images/players/{{ key }}.png" title="{{ player.name }}">
            <div class="pPlayerPos hidden">{{ player.nid }}</div>
          </div>
        {% endfor %}
        </div>
      {% endfor %}
    </div>
    <!-- This works -->
    <a class="use-ajax" href="/custom_ajax_link/Bob"> open alert for ajax link testing </a>
</div>

Файл моего маршрутизатора:

custom_ajax_link.routing:
  path: '/custom_ajax_link/{pid}'
  defaults:
    _title: 'Custom Ajax Link'
    _controller: '\Drupal\custom_ajax_link\Controller\CustomAjaxLinkController::customAjaxLinkAlert'
  requirements:
    _permission: 'access content'

Файл моего контроллера:

<?php
namespace Drupal\custom_ajax_link\Controller;
use Drupal\Core\Ajax\AjaxResponse;
use Drupal\Core\Ajax\AlertCommand;
use Drupal\Core\Controller\ControllerBase;

class CustomAjaxLinkController extends ControllerBase {
  public function customAjaxLinkAlert($pid) {
    # New responses
    $response = new AjaxResponse();
    # Commands Ajax
    $response->addCommand(new AlertCommand('Hello, '. $pid));
    # Return response
    return $response;
  }
}
...