【问题标题】:Extjs form : load dataExtjs 表单:加载数据
【发布时间】:2011-11-30 19:00:22
【问题描述】:

我想将 json 数据加载到表单中。

我的 json :

{
    "success": "true",
    "data": {
        "operation[id]": "1199",
        "operation[startdate]": "2011-10-04 08:00:00",
        "operation[starthour]": "08:00",
        "operation[enddate]": "2011-10-04 18:00:00",
        "operation[endhour]": "18:00",
        "operation[year]": "2011",
        "operation[abscomment]": "",
        "operation[person_id]": "13",
        "operation[Mission]": {
            "id": "1",
            "operation_id": "1199",
            "subject": null
        }
    }
}

它适用于像 operation[id] 这样的键,但不适用于 operation[Mission][id]。

以我的形式:

{
  xtype: 'textfield',
  fieldLabel: 'Subject',
  name:'operation[Mission][subject]',
  anchor: '50%',
  margin: '15 10 5 10',
  allowBlank: false,
  blankText:'required'
},

【问题讨论】:

    标签: extjs extjs4


    【解决方案1】:

    要使 operation[Mission][id] 有效,您必须更改 JSON 结构并删除一些嵌套。 name 只是一个字符串标识符,不能用它来表示如何从嵌套的 JSON 结构中获取数据。

    {
        "success": "true",
        "data": {
            "operation[id]": "1199",
            "operation[startdate]": "2011-10-04 08:00:00",
            "operation[starthour]": "08:00",
            "operation[enddate]": "2011-10-04 18:00:00",
            "operation[endhour]": "18:00",
            "operation[year]": "2011",
            "operation[abscomment]": "",
            "operation[person_id]": "13",
            "operation[Mission][id]":"1",
            "operation[Mission][operation_id]":"1199",
            "operation[Mission][subject]":null
        }
    }
    

    【讨论】:

    • 好的,我更改了我的 JSON 结构,但它不起作用 =/ 我也应该更改表单吗?
    • @kyrillos 没有看到就很难知道。也许您可以将完整的表格和新的 JSON 作为原始问题的一部分发布?
    • 抱歉,实际上效果很好 =) 非常感谢!!
    • @kyrillos 没问题。此外,如果您在 Sencha 论坛上搜索,Animal 会发布一些关于尝试将嵌套 JSON 结构加载到表单中的帖子。
    【解决方案2】:

    目前您不能在表单字段定义中使用 name='property.subProperty' :(。

    所以为了使这项工作,我恢复逻辑 - 将(冗余)字段定义添加到模型:

    Ext.define('operation', {
      extend: 'Ext.data.Model',
      fields: [
        'id',
        'startDate',
        'endDate',
        ...
        {name: 'missionId', mapping: 'mission.id'}
      ]
    });
    

    然后您可以创建一个表单字段,例如:

    {
      xtype: 'displayfield',
      name: 'missionId',
      ...
    }
    

    它将被填充到 form.loadRecord()。

    在你的情况下,JSON 属性名称有点奇怪,所以映射可能有点困难,所以最好使用转换函数。

    【讨论】:

    • 这太棒了,json 可以在这个映射中“按原样”使用。将初始 json 调整为“更合规”只能作为最后的手段,因为这并不总是可行的。对我来说,这是最好的答案,而且正是我用谷歌搜索了大约 1 小时。竖起大拇指!
    【解决方案3】:

    或者,您可以使用您可能在其他地方加载的对象的数据来设置字段的值。


    理想情况下,您的模型对象和表单字段的名称匹配,然后您可以在传递您获取的模型记录的表单上执行 loadRecord。但是,如果不是这种情况,并且您从另一个模型或只是一个 Ajax 请求中读取了一大块数据,您仍然可以通过设置字段的“值”属性来使用该数据设置表单字段。如果需要,您可以像这样挖掘模型对象的数据属性:“myModel.data.subObject.someProperty”

    【讨论】:

      【解决方案4】:

      如果是 1:1 嵌套关系,一切正常, 但如果你有 1:N 结构:

       "operation[id]": "1199",
              "operation[startdate]": "2011-10-04 08:00:00",
              "operation[starthour]": "08:00",
              "operation[enddate]": "2011-10-04 18:00:00",
              "operation[endhour]": "18:00",
              "operation[year]": "2011",
              "operation[abscomment]": "",
              "operation[person_id]": "13",
              "operation[Mission][id]":"1",
              "operation[Mission][operation_id]":"1199",
              "operation[Mission][subject]":null,
               "operation[Mission][id]":"2",
              "operation[Mission][operation_id]":"1123",
              "operation[Mission][subject]":"Second nested subject"
      

      您如何挖掘数据。 例如,假设您有一个带有一些文本字段和一个网格(订单详细信息)的表单(订单),这是真实应用程序中已知的案例。 您有一个嵌套模型(Orders->Order Details),并且您想将网格与 OrderDetails 网络数据绑定......这可能吗?

      【讨论】:

        猜你喜欢
        • 2012-02-10
        • 1970-01-01
        • 2013-07-07
        • 1970-01-01
        • 1970-01-01
        • 2010-12-19
        • 2023-03-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多