Ext.data.Modelを使ったクライアントサイドバリデーション
データモデルにvalidationの定義を含めることができる。Ext.define('User', { extend: 'Ext.data.Model', fields: [ {name: 'name', type: 'string'}, {name: 'age', type: 'int'}, {name: 'phone', type: 'string'}, {name: 'gender', type: 'string'}, {name: 'username', type: 'string'}, {name: 'alive', type: 'boolean', defaultValue: true} ], validations: [ {type: 'presence', field: 'age'}, {type: 'length', field: 'name', min: 2}, {type: 'inclusion', field: 'gender', list: ['Male', 'Female']}, {type: 'exclusion', field: 'username', list: ['Admin', 'Operator']}, {type: 'format', field: 'username', matcher: /([a-z]+)[0-9]{2,3}/} ] });
バリデートはExt.data.Modelのvalidate()で行う。
結果は、Ext.data.Errorsが返される。
var errors = instance.validate();
サーバサイドバリデーション
サーバサイドのバリデーションの結果をExt.data.Model.validate()と同じ形で得るためには、データモデルのproxyにreaderを正しく設定する必要がある。
Ext.define('Employee', { extend : 'Ext.data.Model', idProperty : 'id', fields : [ { name : 'id', type : 'string' }, { name : 'firstName', type : 'string' }, { name : 'lastName', type : 'string' }, { name : 'gender', type : 'string' } ], proxy : { url : "/コンテキストルート/employeeService", type : "rest", reader : { type : 'json', messageProperty : 'errors' } } });
このデータモデルのsave()メソッドに対して、サーバ側バリデーションを返す場合、以下のようなJSONデータをサーバは返さなければならない。
{ 'success' : false, 'errors' : { 'id' : 'Error Message1', 'firstName' : 'Error Message 2', 'lastName' : 'Error Message3' } }
readerのmessagePropertyの値と、JSONデータのエラーのプロパティを一致させること。
バリデーション結果は、モデルのload(), save(), destroy()メソッドのsuccess, failureコールバックの引数 operation (ext.data.Operation) から得られる。
var emp = Ext.ModelManager.getModel('Employee'); emp.set('123', 'Fidel', 'Castro', 'Male'); emp.save({ waitMsg : 'Saving...', success : function(operation){ }, failure : function(operation){ var errors = operation.getError(); } });
validationの結果をformに適用する
formのmarkInvalid()を使ってvalidationの結果をformに適用する事が出来る。
var errors = instance.validate(); form.markInvalid(errors);
0 件のコメント:
コメントを投稿