【问题标题】:Rails and knockout.js bind nested element without using foreach in fields_forRails 和 knockout.js 绑定嵌套元素而不在 fields_for 中使用 foreach
【发布时间】:2013-11-06 18:30:57
【问题描述】:

我正在使用带有 knockout.js 和 ko.mapping 的 rails 3.2。我可以从我的 json 数据映射并从中创建我的 viewModel,在 js 控制台中我可以很好地查看数据树。在我看来,我正在使用带有字段的 form_for 来呈现我的视图。我不知道如何在 fields_for 内对我的输入进行数据绑定,而无需使用 KO foreach 或 with。我的json的结构是这样的。

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

由于我的 fields_for 已经在我的元素中循环,我将如何在我的输入中写出我的 data-bind 属性以直接指向 cell_value 而不使用 knockout.js 循环?

【问题讨论】:

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


    【解决方案1】:

    data-bind 属性仍然需要从数据中导航由 ko 映射生成的对象层次结构,所以我认为如果不在服务器上生成类似以下混乱 html 的内容,您就无法逃脱(小提琴:http://jsfiddle.net/NAUeV/1/ ):

    <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 在客户端生成?

    【讨论】:

    • 在我们现有的代码可以被重构之前,我们一直停留在现有的视图代码中。感谢您的回答,它工作得非常好,对我来说应该很明显,但这就是我看得太久的结果。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2012-06-10
    • 2013-03-23
    • 2014-02-27
    • 1970-01-01
    • 2013-09-04
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多