Изменяют ли теги <% =%> тип переменной? Переданные переменные не работают внутри моей функции - PullRequest
0 голосов
/ 28 апреля 2019

Я передал информацию из mongoDB с помощью mongoose в мой файл ejs.Отсюда я пытаюсь перебрать данные через функцию addMarker, которая извлекает данные с тегом <% =%> и добавляет их на карту Google.

Я проверил значения, напечатав их и их «typeof» на консоли, и они показывают, что они правильные (число, число, строка) и правильное значение.Поэтому я предполагаю, что либо способ передачи значений недопустим, либо теги <% =%> меняют тип переменной.Я также попытался использовать теги <% - и <% </p>

ejs

<script> 
        function initMap(){
            //Map Options to dictate zoom and position
            var options = {
                zoom: 16, 
                center: {lat:35.6543936, lng: -97.4714266}
            }
            //init map for view
            var map = new google.maps.Map(document.getElementById('map'), options);

            /*var marker = new google.maps.Marker({
                position:{lat: 35.654243, lng: -97.472937 },
                map: map,
                title: 'Math And Computer Science'
            });*/

            //addMarker({coords:{lat:35.6543936, lng: -97.4714266}, title: "TestCase"});
            //addMarker({coords:{lat:35, lng: -97}, title: "TestCase2"});

            <% for (const location of results) { %>
               addMarker({coords:{lat: <%=location.lat %>, lng: <%=location.lng%> }, title: <%=location.title%> } );
               <%= console.log(location.lat) %>
               <%= console.log(typeof location.lat) %>
               <%= console.log( location.title) %>
            <% } %>


            //Add Marker Function
            function addMarker(props){
                var marker = new google.maps.Marker({
                    position: props.coords,
                    map:map,
                    title: props.title
                })
            }
        }
</script>

Так что я прокомментировал тесты addMarker:

            //addMarker({coords:{lat:35.6543936, lng: -97.4714266}, title: "TestCase"});
            //addMarker({coords:{lat:35, lng: -97}, title: "TestCase2"});

, которые оба работают какпредназначена.Когда я запускаю addMarker в моем цикле, карта отображается, но на карте не отображаются маркеры.

1 Ответ

0 голосов
/ 28 апреля 2019

Вы можете увидеть источник скрипта в браузере, чтобы увидеть сгенерированный код.

Код <% выполняется на сервере, а затем сгенерированный JS выполняется в браузере. </p>

Например, вам нужно включить вашtitle в "'" и использовать функцию js за пределами <% (пример для console.log): </p>

         <% for (const location of results) { %>
           addMarker({coords:{lat: <%=location.lat %>, lng: <%=location.lng%> }, title: '<%=location.title%>' } );
           console.log( <%= location.lat %> ); 
           console.log( <%= typeof location.lat %> );
           console.log( '<%= location.title %>' ); 
        <% } %>
...