从外部文件调用 js 函数 Symfony Twig

Call js function from external file Symfony Twig

我在 Symfony 4.4 中从树枝视图调用函数时遇到问题。此视图称为 UserList.html.view 并扩展了 base.html.twig

文件开头如下:

{% extends 'base.html.twig' %}
{% block body %}
{% block javascripts %}
    <script src="{{ asset('build/js/custom.js') }}"></script>
...

我也尝试通过添加条目来使用 Encore,但它不起作用。访问外部函数的唯一方法是从父视图调用它们,这显然不是我想要的。

我得到的错误:

Uncaught ReferenceError: coucou is not defined at HTMLButtonElement.onclick (VM3883 manageAccounts:183) onclick @ VM3883 manageAccounts:183

我阅读了一些关于此的其他帖子,但其中 none 实际上提供了一个可行的解决方案。

感谢您的帮助!

您好,欢迎来到 SO 论坛。很难根据提供的代码片段来解决您的问题 - 但 twig 块的使用可能没有像您假设的那样实现/工作。也就是说,已实现的主体块内的 javascript 块与基本模板中的类似命名块无关(我假设那里有类似命名的块),因为它被放置在您完全覆盖的主体块内这个 UserList.html.twig 模板。

一个基本的工作树枝结构应该是这样的:

base.html.twig

<html>
    <head>
        ...
    </head>
    <body>
        ...
        {% block body %}
            ...
        {% endblock %}
        ...
        {% block javascripts %}
           ...
        {% endblock %}
        ...
    </body>
</html>

UserList.html.twig - 请注意 parent() 调用确保继承模板中的块内容也包含在内(即,如果您有一些通用的 jquery 或其他一些generic js includes defined there) - 如果没有 parent(),您将在此模板中再次完全定义 javascripts 块内容。

{% extends 'base.html.twig' %}

{% block body %}
   ...
{% endblock %}

{% block javascripts %}
   {{ parent() }}
   <script src="{{ asset('build/js/custom.js') }}"></script>
{% endblock %}

我希望在这个困难时期每个人都过得很好!法国上周开始遏制,所以我有足够的时间寻找解决方案。

有史以来最愚蠢的事情,但我不知道..

在你的 js 外部文件中,你必须像这样声明你的函数:

window.myfunction = function myfonction(){}

就这些了..

这可能会导致安全问题吗?我不知道所以我问 xD