Typo3 中未调用 RequireJS 回调
RequireJS callback not called in Typo3
我们正在为一个更大的大学网站开发 Typo3 扩展,并且正在努力在前端使用 RequireJS 获取自定义 JavaScript 代码到 运行。当我们尝试使用 RequireJS 加载我们的依赖项时,我们连一个简单的例子都无法运行。
我们尝试遵循官方文档 https://docs.typo3.org/m/typo3/reference-coreapi/9.5/en-us/ApiOverview/JavaScript/RequireJS/Index.html,但我们就是无法调用 Test.say()
(见下文)。
我们的项目结构如下:
- Classes
- (all our PHP code)
- Configuration
- (AjaxRoutes, FlexForms and TCA)
- Ressources
- Private
- Templates
- Modulelist
- List.html
- Public
- JavaScript
- ListFilter.js
- composer.json
- ext_emconf.php
- ext_localconf.php
- ext_tables.sql
List.html:
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers">
<!-- this is just some table filled by a controller -->
<table border="1" cellspacing="1" cellpadding="5">
<tr>
<td>Modulname</td>
<td>OU Name</td>
<td>ECTS</td>
</tr>
<f:for each="{modules}" as="module">
<tr>
<td align="top">{module.name}</td>
<td align="top">
<f:format.crop maxCharacters="100">{module.offeredBy.name}</f:format.crop>
</td>
<td align="top">{module.ects}</td>
</tr>
</f:for>
</table>
<!-- our extension is named DemoExtension -->
<f:be.pageRenderer
includeRequireJsModules="{
0:'TYPO3/CMS/DemoExtension/ListFilter'
}"
/>
</html>
ListFilter.js:
console.log("ListFilter.js loaded");
define(['jquery', 'TYPO3/CMS/Core/DocumentService'], function($, DS) {
console.log("List.html inside define");
var Test = {
message: "test"
};
Test.say = function() {
alert(Test.message);
};
$(document).ready(function() {
console.log("List.html inside define, jQ callback");
Test.say();
});
DS.ready().then(() => {
console.log("List.html inside define, DS callback");
Test.say();
});
return Test;
});
但是,当加载相应的页面时,只有以下行被打印到控制台:
ListFilter.js loaded
我们在谷歌上搜索了很多,但无法正常工作。我们缺少什么?
你真的加载 RequireJS 了吗?
PageRenderer
中 TYPO3 中的特殊 RequireJS 支持仅适用于后端。
TYPO3 在前端默认不加载任何 Javascript。
您的前端呈现的内容由您的模板定义 (typoscript/fluid)
您可能正在寻找 page.includeJS 或类似的配置。但是最好的方法可能非常广泛,具体取决于您呈现前端的方式以及您网站中的其他扩展,例如 vhs/flux
请参阅此核心文档以获取 PAGE OBJECT 的参考
https://docs.typo3.org/m/typo3/reference-typoscript/master/en-us/Setup/Page/Index.html#page
我们正在为一个更大的大学网站开发 Typo3 扩展,并且正在努力在前端使用 RequireJS 获取自定义 JavaScript 代码到 运行。当我们尝试使用 RequireJS 加载我们的依赖项时,我们连一个简单的例子都无法运行。
我们尝试遵循官方文档 https://docs.typo3.org/m/typo3/reference-coreapi/9.5/en-us/ApiOverview/JavaScript/RequireJS/Index.html,但我们就是无法调用 Test.say()
(见下文)。
我们的项目结构如下:
- Classes
- (all our PHP code)
- Configuration
- (AjaxRoutes, FlexForms and TCA)
- Ressources
- Private
- Templates
- Modulelist
- List.html
- Public
- JavaScript
- ListFilter.js
- composer.json
- ext_emconf.php
- ext_localconf.php
- ext_tables.sql
List.html:
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers">
<!-- this is just some table filled by a controller -->
<table border="1" cellspacing="1" cellpadding="5">
<tr>
<td>Modulname</td>
<td>OU Name</td>
<td>ECTS</td>
</tr>
<f:for each="{modules}" as="module">
<tr>
<td align="top">{module.name}</td>
<td align="top">
<f:format.crop maxCharacters="100">{module.offeredBy.name}</f:format.crop>
</td>
<td align="top">{module.ects}</td>
</tr>
</f:for>
</table>
<!-- our extension is named DemoExtension -->
<f:be.pageRenderer
includeRequireJsModules="{
0:'TYPO3/CMS/DemoExtension/ListFilter'
}"
/>
</html>
ListFilter.js:
console.log("ListFilter.js loaded");
define(['jquery', 'TYPO3/CMS/Core/DocumentService'], function($, DS) {
console.log("List.html inside define");
var Test = {
message: "test"
};
Test.say = function() {
alert(Test.message);
};
$(document).ready(function() {
console.log("List.html inside define, jQ callback");
Test.say();
});
DS.ready().then(() => {
console.log("List.html inside define, DS callback");
Test.say();
});
return Test;
});
但是,当加载相应的页面时,只有以下行被打印到控制台:
ListFilter.js loaded
我们在谷歌上搜索了很多,但无法正常工作。我们缺少什么?
你真的加载 RequireJS 了吗?
PageRenderer
中 TYPO3 中的特殊 RequireJS 支持仅适用于后端。
TYPO3 在前端默认不加载任何 Javascript。
您的前端呈现的内容由您的模板定义 (typoscript/fluid)
您可能正在寻找 page.includeJS 或类似的配置。但是最好的方法可能非常广泛,具体取决于您呈现前端的方式以及您网站中的其他扩展,例如 vhs/flux
请参阅此核心文档以获取 PAGE OBJECT 的参考 https://docs.typo3.org/m/typo3/reference-typoscript/master/en-us/Setup/Page/Index.html#page