Вызов функции js из внешнего файла Symfony Twig - PullRequest
1 голос
/ 08 марта 2020

У меня проблемы с вызовом функций из представлений веток в 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 не определен at HTMLButtonElement.onclick (VM3883 manageAccounts: 183) onclick @ VM3883 manageAccounts: 183

Я читал некоторые другие сообщения по этому поводу, но ни один из них на самом деле не предоставил работающего решения.

Спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 19 марта 2020

Надеюсь, у всех все хорошо в эти смутные времена! Франция начала сдерживать на прошлой неделе, поэтому у меня было много времени, чтобы найти решение.

Самая глупая вещь, но я этого не знал ..

В ваших js внешних файлах вы должны объявите свои функции следующим образом:

window.myfunction = function myfonction(){}

Вот и все ..

Может ли это привести к проблемам безопасности? Я не знаю, поэтому я спрашиваю xD

0 голосов
/ 09 марта 2020

Привет и добро пожаловать на SO форумы. Трудно указать на вашу проблему, основываясь на предоставленных фрагментах кода, но использование блока веток может быть чем-то, что не реализовано / работает, как вы предполагаете. А именно, блок javascript внутри реализованного блока тела не имеет отношения к блоку с аналогичным именем в базовом шаблоне (я предполагаю, что там есть блок с аналогичным именем), потому что он находится внутри блока тела, который вы полностью перезаписываете в этом UserList.html.twig template.

Базовая c рабочая структура ветки будет выглядеть примерно так:

base. html .twig

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

UserList. html .twig - обратите внимание на вызов parent(), который гарантирует, что содержимое блока из унаследованного шаблона также включено (т. е. если у вас есть какие-то универсальные c jquery или некоторые другие универсальные c js включенные определяется здесь) - без parent() вы будете снова полностью определять содержимое блока javascripts в этом шаблоне.

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

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

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