TYPO3:在JavaScript中使用Fluid变量吗?

时间:2019-01-08 16:07:35

标签: typo3 fluid typo3-6.2.x

我已经用模板编写了TYPO3扩展名。在该模板中,我在<script>标签之间有一个JavaScript函数。刚才引起我注意的是整个模板都是由Fluid渲染的(对吗?)。因此,它应该将我的JavaScript函数的大括号(function (){...})放在我的<script>标记内(或者应该不要,因为它是JavaScript,并且不应该由Fluid来考虑)。正确?由于我的代码一直有效,因此似乎并非如此。我想知道为什么它一直有效? TYPO3是否识别脚本标记并忽略其中的所有内容?顺便说一下,这是TYPO3 6.2。

现在,更重要的问题是:如何在<script>标签之间的javascript函数内部访问通过控制器分配给视图的关联数组?我在JavaScript函数中尝试了类似var x = {test_variable}的操作,但这不起作用。这暗示着Fluid内部不解释JavaScript中的大括号。但是我发现有消息来源声称他们是。但是在我看来,花括号似乎被Fluid忽略了。这就解释了为什么我的JavaScript一直都能正常工作。我很困惑,因为我无法解释所有这些事情。无论如何,那么如何在JavaScript中访问在控制器中分配给视图的变量?我希望我的意思很清楚。

2 个答案:

答案 0 :(得分:1)

流体生成文本。对于Fluid,无论您生成XML,txt,HTML,Javascript还是PHP,都没有区别。

这样,您可以在任何地方使用Fluid变量。但是您需要考虑对输出中包含大括号作为纯输出的变量使用大括号的特殊处理。流体可能会弄伤花括号,该花括号应作为变量的导入形式输出。
(如果在错字中生成多行javascript,也会出现类似的问题)

并非唯一能识别大括号的所有用法。

如果示例var x = {test_variable}中的变量包含一些文本,则您错过了'"来指示javascript字符串。但这会导致JavaScript语法错误。
如果您从字面上在JavaScript中找到了{test_variable},则可能未在其中定义名为test_variable的Fluid变量。 (检查<f:debug>{_all}</f:debug>

答案 1 :(得分:0)

简而言之。 这似乎是TYPO3中的缓存/渲染错误。一个有效的解决方法是将代码包围起来,从而导致条件问题。

所以

...
var x = {test_variable}
...

可以写为

<f:if condition="1">
    ...
    var x = {test_variable}
    ...
</f:if>

感谢@Robert对answer from Bernd Wilke的研究和评论
(此错误在TYPO3 v9.5.23中仍然存在。未在V10.4中进行测试)