Можно ли использовать тег шаблона Django внутри JS-скрипта? - PullRequest
3 голосов
/ 28 октября 2010

Я использую Google Maps API и хотел бы, чтобы окно первого маркера открывалось при первом отображении шаблона, но только , если определенное условие выполняется.

У меня есть что-то вроде этого:

{% if project %}
//the following is automatically open the infowindow of the FIRST marker in the array when rendering the template
  var infowindow = new google.maps.InfoWindow({
    maxWidth:500
  });
  infowindow.setContent(markers[0].html);
  infowindow.open(map, markers[0]);
{% endif %}

Это не выдает ошибку в Firefox или Internet Explorer 7; он делает то, что я хочу - но он просто кажется неправильным. Мой текстовый редактор кричит головой с предупреждениями / ошибками.

Это плохая практика кодирования? И если так, какие-либо предложения для альтернативы?


Это полный код внутри тегов скрипта с вычеркнутыми неактуальными битами:

function initialize() {
  ...
  var map = new google.maps.Map(document.getElementById("map_canvas"),
                                myOptions);

  var markers = []
  setMarkers(map, projects, locations, markers);
  ...
}

function setMarkers(map, projects, locations, markers) {
  for (var i = 0; i < projects.length; i++) {
    var project = projects[i];
    var address = new google.maps.LatLng(locations[i][0],locations[i][1]);

    var marker = new google.maps.Marker({
            map: map, 
            position:address,
            title:project[0],
            html: description
        });

    markers[i] = marker;
    google.maps.event.addListener(marker, 'click', function() {
           infowindow.setContent(this.html);
              infowindow.open(map,this);
    });
  }

{% if project %}
//the following is automatically open the infowindow of the FIRST marker in the array when rendering the template
  var infowindow = new google.maps.InfoWindow({
    maxWidth:500
  });
  infowindow.setContent(markers[0].html);
  infowindow.open(map, markers[0]);
{% endif %}

 })
}

google.maps.event.addDomListener(window, 'load', initialize);

1 Ответ

5 голосов
/ 28 октября 2010

Нет ничего плохого в использовании тега шаблона Django внутри скопления Javascript.Язык шаблонов Django по большей части не зависит от языка: ему все равно, что означает шаблонный текст.

У меня есть реки Javascript с тоннами тегов, условных выражений, подстановок переменных и так далее.

Другой вариант для такого рода вещей - вставить логическую переменную Javascript и поместить условие в Javascript:

<script>
var is_project = {% if project %}true{% else %}false{% endif %};

//...

if (is_project) {
    // stuff for project
}
</script>

Полагаю, это поддерживает чистоту Javascript.Вы должны решить, основываясь на вашем собственном коде, какой стиль вы предпочитаете.

...