无法访问通过 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>

希望这对遇到同样问题的人有所帮助!