如何在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;

});