Extjs5.1(10):Form載入複雜Json

來源:互聯網
上載者:User

Extjs5.1(10):Form載入複雜Json

1、最簡單的方式。

 

如果載入的json資料格式類似於下面這種格式:

 

{  success:true,  data:{    name:zhuangweihuang,    age:25,    email:1234567@qq.com  }}

 

那麼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:1234567@qq.com  }}

我們修改了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:1234567@qq.com  }}

看一下這個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的組件中。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.