无法访问通过 javascript 中的 twig 传递的实体数组
Unable to access array of entities passed through twig in javascript
我目前正在做一个 symfony2.0 项目。目前我被困在某个时候,我想在我的树枝文件中使用一些简单的 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 或名称或其他任何东西 属性。
我搜索了其他几个问题,例如 this,但不幸的是,它们对实体数组没有帮助。
非常感谢任何帮助。
一般来说,除非绝对必要,否则不应让 Twig 处理数据格式,例如作为对 AJAX 调用的响应。
话虽如此,您的问题在于您如何声明 mach_array。
var mach_array = {{machines|json_encode|raw}};
应该是
var mach_array = '{{machines|json_encode|raw}}';
通过不包装对 twig 的调用,Javascript 将使 mach_array 成为对象,与
相同
var mach_array = {"foo" : "bar"}
解析为对象。
所以我刚刚在 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>
希望这对遇到同样问题的人有所帮助!
我目前正在做一个 symfony2.0 项目。目前我被困在某个时候,我想在我的树枝文件中使用一些简单的 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 或名称或其他任何东西 属性。
我搜索了其他几个问题,例如 this,但不幸的是,它们对实体数组没有帮助。
非常感谢任何帮助。
一般来说,除非绝对必要,否则不应让 Twig 处理数据格式,例如作为对 AJAX 调用的响应。
话虽如此,您的问题在于您如何声明 mach_array。
var mach_array = {{machines|json_encode|raw}};
应该是
var mach_array = '{{machines|json_encode|raw}}';
通过不包装对 twig 的调用,Javascript 将使 mach_array 成为对象,与
相同var mach_array = {"foo" : "bar"}
解析为对象。
所以我刚刚在 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>
希望这对遇到同样问题的人有所帮助!