symfony 使用Javascript访问通过Twig传递的变量

oxiaedzo  于 2022-11-16  发布在  Java
关注(0)|答案(5)|浏览(146)

我有一个控制器,它将一个数组传递给一个分支模板,我想在该页面上编写的脚本中使用它。
我已经在我的.twig模板中尝试过了:

<script>
    $(document).ready(function(){
        var test = {{ testArray }};
});
</script>

但只有字符串才有效。

iqxoj9l9

iqxoj9l91#

您可能需要json_encode数组,请尝试以下操作:

<script>
    $(document).ready(function(){
        var test = {{ testArray|json_encode(constant('JSON_HEX_TAG'))|raw }};
    });
</script>
gdrx4gfi

gdrx4gfi2#

首先,发送来自控制器的json编码数据,并
然后在JavaScript中,

var context= JSON.parse('{{ YourArrayFromController|raw}}');
dluptydi

dluptydi3#

"我是这么做的"
返回控制器test.data然后

$test = array('data' => array('one','two'))

小枝:

<div id="test" data-is-test="{{ test.data|json_encode }}"></div>

詹:

$(document).ready(function() {
    var test = $('#test').data("isTest");
    console.log(test);
});

输出量:

["one", "two"]

documentation here

disho6za

disho6za4#

json_encoderaw过滤器结合使用效果很好。

<script>
    $(document).ready(function(){
        let test = {{ testArray | json_encode(constant('JSON_HEX_TAG')) | raw }};
    });
</script>

不要忘记JSON_HEX_TAG标志。
否则,您可能会得到不完整的HTML。A string containing <!--<script>是一个很好的测试方法。

91zkwejq

91zkwejq5#

我在我的控制器中安装了SerializerBundle

$serializer = $this->get('serializer');
        $countries = $this->getDoctrine()->getRepository("QSCORBundle:CountryMaps")->findAll();
        $jsonCountries = $serializer->serialize($countries, 'json');
 return $this->render('QSCORBundle:Default:index.html.twig',array("countries"=> $jsonCountries));

在我的档案中

<script type="text/javascript" >
 var obj = {{ countries|json_encode|raw }};
 var myObject = eval('(' + obj + ')');

 console.log(myObject[0]['capital_latitude'] + " " + myObject[0]['capital_longitude']);//for the First Element
</script>

相关问题