gpt4 book ai didi

javascript - 在 JS 脚本中使用 Django 模板标签可以吗

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:55:05 25 4
gpt4 key购买 nike

我正在实现 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);

最佳答案

在一堆 Javascript 中使用 Django 模板标签没有错。 Django 的模板语言在很大程度上与语言无关:它不关心模板文本的含义。

我有大量的 Javascript 河流,其中有大量的标签、条件、变量替换等等。

对于这种事情,你的另一个选择是插入一个 Javascript bool 变量,并将条件放在 Javascript 中:

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

//...

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

我想这会让 Javascript 更干净。您必须根据自己的代码来决定您喜欢哪种风格。

关于javascript - 在 JS 脚本中使用 Django 模板标签可以吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4046203/

25 4 0