我目前正在研究symfony2.0项目。目前我被困在某个地方,我想在我的twig文件中使用一些简单的javascript。
从我的控制器中,我将一个名为Machine
的实体数组传递给twig文件,如下所示:
...
return $this->render('PRwissHostsBundle:mini:editLocation.html.twig',
array(
'form' => $form->createView(), 'id' => $id, 'machines' => $machinesInLoc,
));
我在twig文件中的表单很容易访问machines
数组。我现在需要的是在javascript中访问这个数组。
目前,我正在这样做:
<script type="text/javascript">
...
var mach_array = {{machines|json_encode|raw}};
var machine = mach_array[0];
alert(machine.name);
....
</script>
不知怎的,如果我提醒mach_array
它说它是一个对象。当我提醒machine
时,结果相同。什么是不可能的是访问机器ID或名称或whatevers属性。
我已经搜索过其他几个问题,例如this但不幸的是,他们对一系列实体没有帮助。
非常感谢任何帮助。
答案 0 :(得分:1)
一般情况下,除非绝对必要,否则不应让Twig处理数据格式化,例如作为AJAX调用的响应。
话虽如此,你的问题在于你如何声明mach_array。
var mach_array = {{machines|json_encode|raw}};
应该是
var mach_array = '{{machines|json_encode|raw}}';
通过不将调用包装到twig,Javascript将使mach_array成为一个Object,它与
相同var mach_array = {"foo" : "bar"}
解析为Object。
答案 1 :(得分:0)
所以我在Nihilnovi的帮助下解决了我的问题。问题不像gregory所说的空数组,我只是没有真正弄清楚如何正确使用javascript和twig实体。现在,工作代码如下所示:
<script type="text/javascript">
function report(period){
var e = document.getElementById("form_machines");
var selectValue = e.options[e.selectedIndex].value;
var selectText = e.options[e.selectedIndex].text;
if (selectValue != ""){
var table = document.getElementById("uebersicht");
var row = table.insertRow(-1);
var cell1 = row.insertCell(0);
var cell2 = row.insertCell(1);
var cell3 = row.insertCell(2);
cell1.innerHTML = "<b>Name:</b>";
var mach_array = {{machinesAvailable|json_encode|raw}};
{% for machine in machinesAvailable %}
if ({{machine.name|json_encode|raw}} == selectText){
cell2.innerHTML = "<a href='{{ url('PRwissHostsBundle_det_machine', { 'id':machine.id }) }}'> {{machine.name}} </a>";
}
{% endfor %}
cell3.setAttribute('align', 'right');
cell3.innerHTML = "<input type='checkbox' id=machine.id >";
}
}
</script>
希望这可以帮助一些处理相同问题的人!