前回に引き続きAlloyのModelについて書いていきます.
今回やったこと
- validateに引っかかった際,任意のエラーメッセージをcontroller側で取得する
ソースコード(一部)
app/model/user.js
extendModel: function(Model) {
_.extend(Model.prototype, {
/* validateプロパティだけど呼び出す時はisValid() */
validate: function(attrs){
for(var key in attrs){
var value = attrs[key];
switch(key){
case 'name':
if(value.length <= 0 || 20 < value.length){
this.errorMsg = '名前は1文字以上20文字以下です';
return 'Error: name';
}
break;
case 'age':
if(value.length <= 0 || isNaN(value)){
this.errorMsg = '年齢は数字のみです';
return 'Error: age';
}
break;
case 'email':
if(!(/^[A-Za-z0-9]+[\w-]+@[\w\.-]+\.\w{2,}$/.test(value))){
this.errorMsg = 'Eメールが正しくありません';
return 'Error: email';
}
break;
}
}
},
errorMsg: ''
});
return Model;
}
app/controller/index.js
if(newUser.isValid()){
newUser.save();
alert('success');
$.userName.setValue('');
$.userAge.setValue('');
$.userEmail.setValue('');
} else{
alert(newUser.errorMsg);
}
今回は_.extendの第2引数内のvalidateと同じレベルでメッセージを格納しておく為のプロパティを宣言しておき,validateに引っかかった際にそこへエラーメッセージを格納するという方法を試してみました.
私が思いつくことなので,おそらくこれが一番簡単な方法なのかなと思います.(公式にもしかしたら何か書いてあると思いますが,あまり見てないので他の方法はわかりません)
結果的にもcontroller側でエラーメッセージを取得できたのでうまくいったのかなと思います.
シミュレータで確認
名前の部分を入力せずに「登録」を押すと
のようにアラートが出てきます.うまくいきました.:)
ついでに他の入力がvalidateで引っかかった場合は
こんな感じでエラーメッセージを取得してくることができました.