Rails和knockout.js绑定嵌套元素而不使用fields_for中的foreach

时间:2013-11-06 18:30:58

标签: javascript jquery ruby-on-rails json knockout.js

我正在使用带有knockout.js和ko.mapping的rails 3.2。我能够从我的json数据映射并从中创建我的viewModel,在js控制台中我可以很好地查看数据树。在我看来,我正在使用form_for和字段来渲染我的视图。我无法弄清楚的是如何对fields_for中的输入进行数据绑定,而不必使用KO foreach或者。我的json的结构看起来像这样。

{
  "ss_sections": [
    {
      "ss_lines": [
        {
          "ss_line_cells": [
            {
              "cell_name": "credits",
              "cell_value": "124795.00",
            },
          ]
        }
      ]
    }
  ]
}

我如何在我的输入上写出我的数据绑定属性,直接指向cell_value而不使用knockout.js循环,因为我的fields_for已经循环遍历我的元素?

1 个答案:

答案 0 :(得分:2)

数据绑定属性仍然需要导航ko映射从数据生成的对象层次结构,所以我不认为你可以逃脱而不会在服务器上生成类似下面的混乱html(小提琴:{{3 }}):

<table id="ss_section0">
    <tr id="ss_line0">
        <td id="cell0">
            <span data-bind="text:ss_sections()[0].ss_lines()[0].ss_line_cells()[0].cell_name"></span>
        </td>
        <td id="cell1">
            <span data-bind="text:ss_sections()[0].ss_lines()[0].ss_line_cells()[1].cell_name"></span>
        </td>        
    </tr>
    <tr id="ss_line1">
        <td id="cell0">
            <span data-bind="text:ss_sections()[0].ss_lines()[1].ss_line_cells()[0].cell_name"></span>
        </td>
        <td id="cell1">
            <span data-bind="text:ss_sections()[0].ss_lines()[1].ss_line_cells()[1].cell_name"></span>
        </td>        
    </tr>    
</table>

它看起来非常均匀,但很容易生成。

您确定需要在服务器上生成html吗?为什么不直接将json发送到客户端并使用标准的foreach / with在客户端生成?