如何在Javascript中连接细枝变量
我有一个如何在Javascript中连接细枝变量,javascript,symfony,twig,Javascript,Symfony,Twig,我有一个Twig模板,其中包含Javascript代码。在我的控件中,我将数组传递到模板中。我正在使用Javascript为Javascript使用googlemapsapi显示地图。我创建了一个变量,在创建标记时,该变量在每轮循环中递增。这个变量我想使用这个变量根据给定的索引访问表的每个元素。因为数组是在twig中,所以索引是在Javascript中。连接似乎很复杂 这正是这个问题所涉及的问题: infowindow.setContent('<div><strong>{
Twig
模板,其中包含Javascript
代码。在我的控件中,我将数组传递到模板中。我正在使用Javascript
为Javascript
使用googlemapsapi显示地图。我创建了一个变量,在创建标记时,该变量在每轮循环中递增。这个变量我想使用这个变量根据给定的索引访问表的每个元素。因为数组是在twig中,所以索引是在Javascript中。连接似乎很复杂
这正是这个问题所涉及的问题:
infowindow.setContent('<div><strong>{{ services['+j+']["name"] }}</strong><br>');
infowindow.setContent('{{services['+j+'][“name”]}}
');
下面是完整的例子:
var j = 0;
var markers = locations.map(function(location, i) {
var marker = new google.maps.Marker({
position: location
});
service.getDetails(
{
placeId: 'ChIJN1t_tDeuEmsRUsoyG83frY4'
},
function(place, status) {
google.maps.event.addListener(marker, 'click', function() {
infowindow.setContent('<div><strong>{{ services['+j+']["name"] }}</strong><br>');
infowindow.open(map, this);
});
});
j++;
return marker;
});
var j=0;
var markers=locations.map(函数(位置,i){
var marker=new google.maps.marker({
位置:位置
});
service.getDetails(
{
placeId:'ChIJN1t_tdeuemsrusoyg83fy4'
},
功能(地点、状态){
google.maps.event.addListener(标记'click',函数(){
infowindow.setContent('{{services['+j+'][“name”]}}
');
打开(地图,这个);
});
});
j++;
返回标记;
});
浏览器(执行javascript的地方)甚至不知道Twig涉及到了什么,因为此时整个Twig代码已经呈现为纯HTML/CSS/javascript。因此,不可能使用Javascript来操纵细枝渲染
相反,你可以
1。将整个服务数组传递给Javascript
看起来是这样的(数组在第2行中传递,infowindow.setContent
的行现在正在使用javascript数组):
然后相应地调整答案1中的解决方案:
var j = 0;
var service_names = {{ service_names|json_encode|raw }};
var markers = locations.map(function(location, i) {
var marker = new google.maps.Marker({
position: location
});
service.getDetails(
{
placeId: 'ChIJN1t_tDeuEmsRUsoyG83frY4'
},
function(place, status) {
google.maps.event.addListener(marker, 'click', function() {
infowindow.setContent('<div><strong>' + service_names[j] + '</strong><br>');
infowindow.open(map, this);
});
});
j++;
return marker;
});
var j=0;
var service_names={{service_names | json_encode | raw};
var markers=locations.map(函数(位置,i){
var marker=new google.maps.marker({
位置:位置
});
service.getDetails(
{
placeId:'ChIJN1t_tdeuemsrusoyg83fy4'
},
功能(地点、状态){
google.maps.event.addListener(标记'click',函数(){
infowindow.setContent(“”+服务名称[j]+”
”);
打开(地图,这个);
});
});
j++;
返回标记;
});
我想你真正的意思是“”+services[j][“name”]+“”是的,但它不起作用。将j++移动到内部函数中,在infowindow.open下设置var j=0;但是在那之后,我在函数中找不到任何改变j的东西…@splaten我猜这不是问题(我做到了)。在返回语句var service_names={{service_names}json_encode | raw}之前查看代码>这是解决方案的一部分,我知道在那之后继续。谢谢
$twig->render('the_template.twig', [
'services' => $services,
'service_names' => array_column($services, 'name')
]);
var j = 0;
var service_names = {{ service_names|json_encode|raw }};
var markers = locations.map(function(location, i) {
var marker = new google.maps.Marker({
position: location
});
service.getDetails(
{
placeId: 'ChIJN1t_tDeuEmsRUsoyG83frY4'
},
function(place, status) {
google.maps.event.addListener(marker, 'click', function() {
infowindow.setContent('<div><strong>' + service_names[j] + '</strong><br>');
infowindow.open(map, this);
});
});
j++;
return marker;
});