Extjs5.1(10):Form加载复杂Json

1、最简单的方式。

如果加载的json数据格式类似于下面这种格式:

{
  "success":true,
  "data":{
    "name":"zhuangweihuang",
    "age":25,
    "email":"[email protected]"
  }
}

那么form表单加载起来是最简单的。注意一下这个json格式,首先,必需要的字段是“success”,form表单加载是否成功,都是通过这个字段来判断(虽然字段名可以自己定义,但一般就用默认的success),如果不传这个字段,form就认为是加载失败,所以就不会显示数据。再看一下“data”这个字段,这里为什么使用“data”,因为form表单默认加载“data”字段中的数据。所以以上的json数据格式,都是以form默认的格式组装的,这种格式form加载起来也是最简单的。

定义一个form

var myForm = Ext.create('Ext.form.Panel',{
    height:200,
    width:400,
    layout:'column',
    border:true,
    margin:20,
    title:'加载复杂json数据的form',
    bodyPadding:10,
    defaults:{
        xtype:'textfield',
        columnWidth: 0.5,
        margin:5,
        labelWidth:40
    },
    items:[
        {
           fieldLabel:'姓名',
           name:'name'
        }, {
            fieldLabel:'年龄',
            name:'age'
        }, {
            fieldLabel:'邮箱',
            name:'email'
        }
    ]
});

加载json数据

myForm.getForm().load({
    url: 'data.json',
    success:function(){
        Ext.Msg.alert("提示","下载json数据成功");
    },
    failure:function(){
        Ext.Msg.alert("提示","下载json数据失败");
    }
});

效果

2、使用自定义的字段加载数据。

上面我们讲了,form加载数据时,默认数据源的字段是“data”,默认加载是否成功的字段是“success”,那么下面讲如何改变这些字段的名称。

例如下面的json格式

{
  "mysuccess":true,
  "person":{
    "name":"zhuangweihuang",
    "age":25,
    "email":"[email protected]"
  }
}

我们修改了success和data的默认字段,改为mysuccess和person,要让form读取我们自定义的这些默认字段,只需要在form里面为其配置读取json数据时执行的动作(有点绕口)。

reader:{
    type:'json',
    model:'myModel',
    rootProperty : 'person',
    successProperty:'mysuccess'
},

里面使用到的model定义

 Ext.define('myModel', {
        extend : 'Ext.data.Model',
        fields : ['name','age','email']
    });

这样子form就能够读取上面的json数据了。

3、读取复杂的json数据

稍微修改一下上面的json数据,让其稍微复杂一点:

{
  "mysuccess":true,
  "person":{
    "name":{
      "first":"zhuang",
      "last":"weihuang"
    },
    "age":25,
    "email":"[email protected]"
  }
}

看一下这个json数据,我们把name拆分成两个字段,first和last,所以我们的form同时也得稍作一下改变,把姓名这个字段变成姓和名,修改form中的items配置。

items:[
    {
       fieldLabel:'姓',
       name:'first'
    }, {
        fieldLabel:'名',
        name:'last'
    }, {
        fieldLabel:'年龄',
        name:'age'
    }, {
        fieldLabel:'邮箱',
        name:'email'
    }
]

效果

接下来要做的就是,把first和last加载到上面的“姓”和“名”框框中。只要修改读取数据时的model就行了。

Ext.define('myModel', {
    extend : 'Ext.data.Model',
    fields : [
        {name: 'first',mapping:'name.first'},
        {name:'last',mapping:'name.last'},
        'age','email'
    ]
});

这里我们使用了mapping配置,作用显而易见,就是把name中的字段first和last映射出来到外面的first和last,这样form在读取json的时候就能读取到这两个字段的数据。

效果

同样的方法也可以用到grid、tree、dataview等等需要用到store(stroe中需要配置model)或者model的组件中。

第三种情况的源码下载

时间: 2024-08-23 07:46:34

Extjs5.1(10):Form加载复杂Json的相关文章

使用Sencha Touch加载本地Json数据

本例没有采用Sencha的mvc模式.只是一个简单的读取加载本地Json数据示例. 文档结构如下: app.js代码如下: Ext.require(['Ext.form.Panel', 'Ext.data.Store', 'Ext.data.reader.Json', 'Ext.dataview.DataView']); Ext.application({ name:'MyApp', icon:'images/icon.png', glossOnIcon:false, phoneStarupSc

能否使用require('.json')的方式加载大量JSON文件?

Node.js中推崇非阻塞I/O,但是require一个模块时却是同步调用的,这会带来性能上的开销,但并不是每次require都很耗时,因为在require成功之后会缓存起来,在此加载时直接从缓存读取,并没有额外开销. 当通过.json的方式加载文件时,固然方便,但大量使用时会导致这些数据被缓存.大量数据会驻留在内存中,导致GC频繁和内存泄漏. 摘自:<技术之瞳> 能否使用require('.json')的方式加载大量JSON文件?

ArcGIS 10.2加载在线影像底图

两种方法: 一.File→ArcGIS Online→影像图→Open. 二. 效果: ArcGIS 10.2加载在线影像底图

Android数据加载及Json解析——原始版

1.创建要下载数据的实体类 class MyData { String imagepath; String title; String desc; public MyData(String imagepath, String title, String desc) { super(); this.imagepath = imagepath; this.title = title; this.desc = desc; } } 2.AsyncTask数据加载及Json解析类 class FileAs

Android利用Volley异步加载数据(JSON和图片)完整示例

Android利用Volley异步加载数据(JSON和图片)完整示例 MainActivity.java package cc.testvolley; import org.json.JSONObject; import android.app.Activity; import android.app.ProgressDialog; import android.graphics.Bitmap; import android.os.Bundle; import android.support.v

ExtJs4学习(十四)Form 加载/更新Record(Model)

什么是Record呢?Record是数据模型对象中的一条记录,所以在使用Record之前,我们需要先定义Model. Model定义 关于Model的定义,我们单独进行演示,今天只是简单的用到,Model代码如下: Ext.define("UserModel", { extend: 'Ext.data.Model', fields: ["UserName", "Email"] }); 定义好Model之后,我们可以创建一条记录: var user

vue2.0配置webpack.dev.conf.js加载本地json数据

打开webpack.dev.conf.js 在const portfinder = require('portfinder')后加入以下配置 1 const express = require('express') 2 const app = express() // 请求server 3 var appData = require('../data.json') //加载本地数据 4 var seller = appData.seller //获取对应的数据 5 var goods = app

.Net Core控制台应用加载读取Json配置文件

⒈添加依赖 Microsoft.Extensions.Configuration Microsoft.Extensions.Configuration.FileExtensions Microsoft.Extensions.Configuration.Json ⒉在项目中添加Json配置文件并将其复制到输出目录属性设置为“始终复制” 1 { 2 "ConnectionStrings": { 3 "StudyConnStr": "Data Source=.;

.Net Core Web应用加载读取Json配置文件

⒈添加Json配置文件并将“复制到输出目录”属性设置为“始终复制” 1 { 2 "Logging": { 3 "LogLevel": { 4 "Default": "Warning" 5 } 6 }, 7 "AllowedHosts": "*" 8 } 1 { 2 "ConnectionStrings": { 3 "StudyConnStr": &