我正在尝试在Drupal 8的树枝模板(而不是表单)中创建ajax链接,并且遇到了一种奇怪的现象。
我设法创建了一个打开警报的简单链接。当我将其放在标记的顶部或底部的树枝模板中时,此方法有效,因此我知道路由器,控制器和模板正在工作。
但是,当我在树枝函数中放置完全相同的代码时,它将停止正常工作。返回json而不是弹出警报,但在新页面上显示,除了包含json数据的texarea之外,什么都没有。该页面没有标题信息(只是空标签)或任何其他标记。
我还注意到,在打开树枝函数语句之后立即放置链接(<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;
}
}