TYPO3 自定义 JavaScript 模块未在后端模块中加载

问题描述 投票:0回答:1

使用TYPO3 12。

我正在尝试将 JavaScript 模块添加到我的后端模块,但我无法让它工作。

这是我按照官方文档所做的:

  1. /Configuration/JavaScriptModules.php
  2. 中注册JS模块
return [
    'dependencies' => ['backend'],
    'imports' => [
        '@vendor/package/' => 'EXT:vendor/Resources/Public/JavaScript/',
    ],
];
  1. 通过
    PageRenderer
     向模块控制器提供 
    /Configuration/Services.yaml
Vendeor\package\Controller\Backend\BackendModuleController:
    tags: ['backend.controller']
    arguments:
      $pageRenderer: '@TYPO3\CMS\Core\Page\PageRenderer'
  1. 使用
    loadJavaScriptModule
    将JS模块添加到页面
    public function initializeAction(): void
    {
        $this->pageRenderer->loadJavaScriptModule('@vendor/package/backend-module.js');
    }

我已经尝试过其他替代方案,例如直接通过

JavaScriptRenderer
访问
PageRenderer
或使用
f:be.pageRenderer
ViewHelper,但似乎没有任何效果。

我还可以通过调试来验证 JS 文件是否已添加到

JavaScriptRenderer
并位于其
importMap
内部。我现在还多次检查了所有文件路径是否存在可能的拼写错误。

我在这里缺少什么?

typo3 typo3-12.x
1个回答
0
投票

解决方案:使用

ModuleTemplateFactory
代替
TemplateView
(extbase)。

不明白为什么这不适用于 extbase 方法,但无论如何,以下是解决此问题的步骤:

  1. 在您的控制器中

    use TYPO3\CMS\Backend\Template\ModuleTemplateFactory;

  2. private readonly ModuleTemplateFactory $moduleTemplateFactory
    属性添加到构造函数

  3. Configuration/Services.yaml
    中添加
    $moduleTemplateFactory: '@TYPO3\CMS\Backend\Template\ModuleTemplateFactory'

  4. 在控制器的任何操作中,您现在都可以执行以下操作:

public function listAction(): ResponseInterface
    {

        $this->pageRenderer->loadJavaScriptModule('@vendor/package/backend-module.js');
        $data= $this->dataRepository->findAll();

        $moduleTemplate = $this->moduleTemplateFactory->create($this->request);
        $moduleTemplate->assign("data", $data);

        return $moduleTemplate->renderResponse();
    }

JS 文件被添加到模块中。

© www.soinside.com 2019 - 2024. All rights reserved.