使用细枝功能时,Drupal 8中的Ajax链接不起作用

时间:2018-12-05 13:34:19

标签: ajax drupal drupal-modules drupal-8

我正在尝试在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;
  }
}

0 个答案:

没有答案