如何让 RequireJS 为 TYPO3 BE 正确解析命名空间?

How to make RequireJS resolve namespace correctly for TYPO3 BE?

我想在 TYPO3 后端加载额外的 JS。我正在使用 the official documentation.

中的 requireJS

在 ext_localconf.php 中,我正在尝试像这样加载我的 JS:

if (TYPO3_MODE=="BE" )   {
    $pageRenderer = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Page\PageRenderer::class);
    $pageRenderer->loadRequireJsModule('TYPO3/CMS/ExtensionName/EventEndDateValidator');
}

在我的浏览器控制台中,我收到如下错误:

Error: Script error for "TYPO3/CMS/ExtensionName/EventEndDateValidator" http://requirejs.org/docs/errors.html#scripterror

Loading failed for the with source “http://localhost/typo3/TYPO3/CMS/ExtensionName/EventEndDateValidator.js?bust=6b9250465c29da98dea71ea9e447e7db2d3ccea3”. index.php:1

所以名称 space 没有解析。 The docs and @DAM 说将 JS 文件放在 EXT:extension_name/Resources/Public/JavaScript 目录中就足够了。

我的 JS 文件是这样的:

define(['jquery'], function($) {
    var EventEndDateValidator = {
        sayings: [
            'The quick brown fox jumps over the lazy dog',
            'Bright vixens jump; dozy fowl quack'
        ]
    };

    EventEndDateValidator.say = function() {
        alert(EventEndDateValidator.sayings[Math.floor(Math.random() * EventEndDateValidator.sayings.length)]);
    };

    $(document).ready(function() {
        // Initialize the view
        EventEndDateValidator.say();
    });
});

我错过了什么吗?

为了澄清您写的一件事,您必须将 ExtensionName 替换为您自己的扩展名 - 不确定您是否这样做:

假设您的分机有密钥 wonderful_extension,那么名称通常是 WonderfulExtension.

然后在文件中ext_localconf.php你必须这样写:

if (TYPO3_MODE=="BE" )   {
    $pageRenderer = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Page\PageRenderer::class);
    $pageRenderer->loadRequireJsModule('TYPO3/CMS/WonderfulExtension/EventEndDateValidator');
}

根据您目前使用的代码,扩展密钥必须是extension_name,名称ExtensionName,真正使用这些字符串可能是不合理的。在文档中,它们必须被视为要替换为您自己的值的变量。