如何使RequireJS为TYPO3 BE正确解析名称空间?

时间:2019-04-11 09:05:04

标签: namespaces requirejs typo3 typo3-8.x

我想在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');
}

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

  

错误:的脚本错误   “ TYPO3 / CMS / ExtensionName / EventEndDateValidator”   http://requirejs.org/docs/errors.html#scripterror

  

with源的加载失败   “ http://localhost/typo3/TYPO3/CMS/ExtensionName/EventEndDateValidator.js?bust=6b9250465c29da98dea71ea9e447e7db2d3ccea3”。   index.php:1

因此,名称空间无法解析。 The docs@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();
    });
});

我想念什么吗?

1 个答案:

答案 0 :(得分:1)

为澄清您写的一件事,您必须将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,实际上使用这些字符串可能并不合理。在文档中,必须将它们视为要用您自己的值替换的变量。