ext5聽從mvc的設計模式,這裏要講的是model 這一層定義javascript
若是你 在java ee 中定義了一個model如User類,那麼在前端ext這裏也要定義一個這樣的model.前端
除了User類中該有的字段外,還要繼承一個叫Ext.data.Model 纔算是定義了一個model。如:java
Ext.define('Test.model.User',{ extend:'Ext.data.Model', idProperty:'userId', //該類的主鍵爲userId字段 fields:[ {name:'userId',type:'string'}, //字段:userId ,類型:string {name:'name',type:'auto'}, //字段:name,類型:不限 {name:'age',type:'int'}, {name:'gender',type:'auto'} ] })
這時咱們實例化這個類:ajax
var p1 = new Test.model.User({ userId:'24dfkl243w3', name:'wx', age:23, gender:'Malsdfe' });
模型類的驗證器的定義與使用設計模式
驗證器能夠查一個實例,各個字段的是否符合咱們所給出的約束,如名稱不能爲空,長度在2-5之間等api
1.在Test.model.User 類中定義驗證器服務器
Ext.define('Test.model.User',{ extend:'Ext.data.Model', idProperty:'userId', fields:[ {name:'userId',type:'string'}, {name:'name',type:'auto'}, {name:'age',type:'int'}, {name:'gender',type:'auto'} ], validators:{ age :{type:'presence'}, //年齡不能爲null或undefined name:{type:'length',min:2,max:5}, //名稱長度在2-5之間 gender:[ {type:'presence'}, //不能空 { type: 'inclusion', list: ['Male', 'Female'] } //值只能是'Male'與'Female' ] } });
爲User定義好了驗證器,下面咱們就能夠對實例化後的User進行驗證瞭如:mvc
var p1 = new Test.model.User({ userId:'24dfkl243w3', name:'wx', age:23, gender:'Malsdfe' });
p1.isValid() //false 這時咱們只知道p1不知足驗證器的規則,但咱們不知道具體是哪一個jsp
var result = p1.getValidation(); console.info(result);
從這裏咱們看了result 中的信息,從信息中咱們知道了是gender出現了問題.在api(Ext.data.validator.Inclusion)中能夠看到這個提示消息是英文,就算國際化了也很差使。這時咱們能夠重寫ext的類達到漢化的目的如:ide
Ext.data.validator.Inclusion.override({ config:{ message:'值不在範圍內' } });
具體的細節還侍學習。
模型類中的代理proxy
目前只知道proxy,後利用ajax能夠從服務端中更新一個實例化好的類,或建立一個類:如
//defined model Ext.define('Test.model.User',{ extend:'Ext.data.Model', idProperty:'userId', fields:[ {name:'userId',type:'string'}, {name:'name',type:'auto'}, {name:'age',type:'int'}, {name:'gender',type:'auto'} ], validators:{ age :{type:'presence'}, //not empty name:{type:'length',min:2,max:5}, gender:[ {type:'presence'}, { type: 'inclusion', list: ['Male', 'Female'] } ] }, proxy:{ type:'ajax', url:'data/data.jsp' } });
url:data.jsp 返回的內容爲:{userId:'24dfkl243w3',name:'Mr.Mark',age:34,gender:'Female'}
var p1 = new Test.model.User({ userId:'24dfkl243w3', name:'wx', age:23, gender:'Malsdfe' }); p1.load({ scope: this, failure: function(record, operation) { //do something if the load failed }, success: function(record, operation) { //do something if the load succeeded }, callback: function(record, operation, success) { //do something whether the load succeeded or failed } });
代碼說明: 當p1調用 load時,將主鍵userId做爲參數傳到服務器,服務器要處理的就是根據這個userId返回相應的數據,從而達到更新的目的。注意:當服務器傳回的UserId與以前的不一致時會報錯。因此這個load主要做用是當服務器的數據發生變化時,能夠及時的更新到前臺。
2.使用proxy建立一個實例:
p2 = Test.model.User.load(10, { scope: this, failure: function(record, operation) { //do something if the load failed }, success: function(record, operation) { //do something if the load succeeded }, callback: function(record, operation, success) { //do something whether the load succeeded or failed }});
代碼說明:10做爲主鍵傳到服務器,服務器返回相應的數據,從而實例化p2對象。注意若是服務器中傳回的主鍵(這裏是userId)與參數不一致(這裏是10)就會報錯。
模型之間的關係 1對1 1對 n
//老師 Ext.regModel("teacher",{ fields:[ {name:"teacherId",type:"int"}, {name:"name",type:"auto"} ], hasMany:{ model:"student", name:"getStudent", filterProperty:"teacher_Id" } }); //學生 Ext.regModel("student",{ fields:[ {name:"studentId",type:"int"}, {name:"name",type:"auto"}, {name:"teacher_Id",type:"int"} ] });
name來指定建立的時候的屬性,這個很重要,若是指定了name,且值爲getStudent 則能夠在建立teacher類的對象中直接調用teacher.students 系統會自動加一個s 這個返回的就是student類的集合filterProperty:指定的外鍵的名字