Я пытаюсь создать ссылки 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;
}
}