Добавление страницы ветки к всплывающему маркеру в листовке вызывает синтаксическую ошибку

Я использую leafletjs для рендеринга карты в приложении symfony. Моя проблема заключается в том, что когда я включаю страницу ветки как всплывающее окно в маркер карты, карта исчезает.

Я попытался добавить один элемент ({{ dreq.dreq_identifier }}) в свою ветку, и он отлично работает! проблема в том, что я добавляю несколько строк.

Вот мой код

<div id = "map" style = "height: 600px;"></div>
{% block javascripts %}
    {{ parent() }}
    <script>
        $(window).on('load', '', function (e) {
            if (document.getElementById('map')) {
                let map;
                //set up the Leaflet.js map
                map = L.map('map', { center: [{{ data[0]['dreq_startLatitude'] }}, {{ data[0]['dreq_startLongitude'] }}], zoom: 13 });
                let sitesGroup = L.layerGroup();
                let customIcon = {
                    iconUrl:"https://raw.githubusercontent.com/pointhi/leaflet-color-markers/master/img/marker-icon-2x-green.png",
                    {#iconUrl:"{{ asset('assets/css/images/marker-icon.png') }}",#}
                    iconSize:[20,30]
                };
                let myIcon = L.icon(customIcon);
                let iconOptions = {
                    icon:myIcon
                };
                // tiles etc
                L.tileLayer('https://{s}.tile.osm.org/{z}/{x}/{y}.png', {
                        attribution: 'kalvo'
                    }
                ).addTo(map);
                {% for element in data %}
                    var marker = new L.Marker([{{ element.dreq_startLatitude }}, {{ element.dreq_startLongitude }}], iconOptions).addTo(map);
                    var popup = L.popup()
                        // .setContent(""<img alt = "orange" align = "bottom" width = "24px" height = "24px" src = "/assets/img/orange.gif"/>");
                        .setContent("{% include 'dreq/maps/_popover_carto_dreqs.html.twig'
                            with {'dreq': element} %}");
                    marker.bindPopup(popup);
                {% endfor %}
            }
        });
    </script>
{% endblock javascripts %}

И в dreq/maps/_popover_carto_dreqs.html.twig я добавил этот код:

{{ operator(dreq.operator) }} channel: <b>{{ dreq.channelId }}</b> - file: <b>{{ dreq.fileName }}</b> - id: <b>{{ dreq.dreq_identifier }}</b>
  - protocol: <b>{{getProtocolsLabel(dreq.dreq_protocol)}}</b> - direction: <b>{{dreq.direction}}</b>file name: <b>{{ dreq.dreq_fileName }}</b> - file size: <b>{{ dreq.dreq_fileSize | formatSize }}</b>status: <b>{{ dreq.dreqStatus }}</b> - packet: <b>{{ dreq.dreqPacketTechnoLabels }}

Когда я нажимаю F12, у меня возникает такая проблема:

Uncaught SyntaxError: недопустимый или неожиданный токен

Что я сделал не так?

Показывает ли это какую-либо ошибку? Код кажется правильным.

Juan Castillo 03.04.2023 12:41

@JuanCastillo показывает Uncaught SyntaxError: недопустимый или неожиданный токен. Я добавлю содержимое ошибки в свой пост.

zackzulg 03.04.2023 12:59

можете ли вы попробовать использовать литерал шаблона? Я имею в виду установку значений в переменных, а затем добавление их в метод, но как литерал шаблона

Juan Castillo 03.04.2023 13:24

.setContent("привет мир"); работает, но .setContent («привет (+ кнопка ввода) мир»); не работает

zackzulg 03.04.2023 13:36

Я предполагаю, что проблема связана с линией возврата, javascript считает ее незавершенной строкой. есть идеи, как преобразовать его в строку? Я думаю, что это, вероятно, работает.

zackzulg 03.04.2023 13:39

Я говорю что-то вроде: let popupContent = "{% include 'dreq/maps/_popover_carto_dreqs.html.twig' with {'dreq': element} %}"; а затем popup.setContent(popupContent); , кроме того, было бы лучше, если бы вы могли видеть значение "popupContent" перед (console.info( popupContent )) для проверки правильности

Juan Castillo 03.04.2023 14:35

Давайте продолжим обсуждение в чате.

Juan Castillo 03.04.2023 14:38

Вам нужно удалить все \r и \n, если вы хотите передать это в JS.

DarkBee 03.04.2023 17:01

есть ли способ сделать это, даже если я использую операторы ветки, такие как if/else?

zackzulg 03.04.2023 17:41

Назначьте включение переменной, затем замените символы новой строки в переменных, передавая их в JS.

DarkBee 04.04.2023 07:12

Я сделал это следующим образом: {% set content %}{% include 'maps/_popover_carto_dreqs.html.twig' with {'dreq': element} %} {% endset %} var popupContent = "{{ content }}"; вар обр = popupContent.split("\n"); console.info(обр); Результат: «Uncaught SyntaxError: недопустимый или неожиданный токен». И красная линия на значении popupContent.

zackzulg 04.04.2023 12:19

Вам нужно удалить символы новой строки, прежде чем передавать их в JS. Многострочное назначение — это не то, что нужно для JS.

DarkBee 04.04.2023 14:51

@DarkBee, моя проблема в том, что у меня много операторов if else, и иметь только одну строку во всплывающем окне ветки не очень чисто. Я думаю, лучший способ - внедрить мою ветку со скрытым div в основную ветку и добавить ее html в мое всплывающее окно в javascript.

zackzulg 05.04.2023 12:55
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
13
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробовав несколько решений, я думаю, что лучшее до сих пор (даже если оно не чистое) - это внедрить всплывающее окно ветки в элемент div и добавить его html во всплывающее окно.

    <div id = "map" style = "height: 600px;"></div>
    {% for element in data %}
        <div id = "{{ element.identifiant }}" hidden>
            {% if type == 'dreq' %}
                {% include 'maps/_popover_carto_dreqs.html.twig' with {'dreq': element} %}
        </div>
    {% endfor %}

Дж:

{% for element in data %}
 var marker = new L.Marker([{{ element['latitude'] }}, {{ element['longitude'] }}], iconOptions).addTo(map);
 var popup = L.popup().setContent($("#{{ element.identifiant }}").html());
 marker.bindPopup(popup, {maxWidth: 600});
 {% endfor %}

Другие вопросы по теме