【问题标题】:jqGrid Access Extra InformationjqGrid 访问额外信息
【发布时间】:2011-08-23 13:19:03
【问题描述】:

我有一个带有自定义格式化程序的动态创建的 jqGrid。我需要能够访问一些不在格式化程序中的网格列中的信息。我的问题是 rowObject 似乎只包含列中的信息而没有其他任何内容,即使 JSON 数据有一个额外的属性。

我的 JSON 看起来像:

{"rows":
  [
    {"cell":["637","Alice","Test","01\/01\/1980",""],"id":"637","patient_id":"637"},
    ...
    {"cell":["635","Alice","Test","01\/01\/1980",""],"id":"635","patient_id":"635"},
  ],
  "form_id":"3",
  "records":"35",
  "total":2,
  "goto_patient_sidebar":"1",
  "totalRecords":"35",
  "dynamicFilters":"",
  "listName":"Patients",
  "page":1,
  "recordsReturned":25,
  "columns":
  [
    {"id":"75","field_id":"2","zmr_list_id":"13","alias":"Last Name",
    "sortorder":"0","reference_field_id":"90","show_date":"0","show_time":"0"},

    {"id":"76","field_id":"1","zmr_list_id":"13","alias":"First Name",
    "sortorder":"1","reference_field_id":"90","show_date":"0","show_time":"0"},

    {"id":"77","field_id":"25","zmr_list_id":"13","alias":"DOB",
    "sortorder":"2","reference_field_id":"90","show_date":"1","show_time":"0"},

    {"id":"78","field_id":"47","zmr_list_id":"13","alias":"Phone Number",
    "sortorder":"3","reference_field_id":"90","show_date":"0","show_time":"0"}
  ]

}

对于每一行,我需要从 JSON 中访问 patient_id。每行的列数据包含在每行的“单元格”中。 rowObject 似乎只包含 JSON 的每个单元格属性中的信息。如何在不将它呈现在列中的情况下访问 patient_id?

【问题讨论】:

    标签: json jqgrid


    【解决方案1】:

    为额外数据添加一个隐藏列。

    【讨论】:

      【解决方案2】:

      在数据中patient_id 的值始终与id 相同。我想可能会有不同(如果patient_id 等于id,您已经可以在自定义格式化程序中看到信息)。您可以通过至少三种方式实现您的需求:

      1. 您添加了一个隐藏列(具有属性hidden:true),它将代表patient_id。您将有关 patient_id 的信息移动到 "cell" 数组内的 JSON 输入中。
      2. 您将有关idpatient_id 之间映射的信息作为userdata 的一部分包含在JSON 中(有关更多信息,请参阅here)。
      3. 您使用loadComplete 事件句柄的data 参数。 data 参数将包含从服务器发布的完整 JSON 数据。您可以从data 获取您需要的信息并将其保存在某处。然后您从自定义格式化程序中获取保存的信息。

      关于您的 JSON 数据的另一个小评论。目前你使用的物品像

      {
          "cell": [
              "637",
              "Alice",
              "Test",
              "01\/01\/1980",
              ""
          ],
          "id": "637",
      }
      

      (如果我们忘记了patient_id)。这意味着您发送id 信息两次:一次作为列的一部分,第二次作为网格的第一列。如果您在第一个网格列的定义中包含key:true 设置并添加jsonReader: {cell:""},您可以使JSON 数据更紧凑,其中行项目将采用数组形式

      [
          "637",
          "Alice",
          "Test",
          "01\/01\/1980",
          ""
      ]
      

      【讨论】: