ext5 Model - 1

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:指定的外鍵的名字

相關文章
相關標籤/搜索