前回の記事に対してとある人から「複数のエラーメッセージを一気に見せてくれた方がユーザにとってはありがたいんじゃない?」と言われたので複数のエラーメッセージを取ってこれるようにしました.
ソースコード
※ここに載せているソースコードは一部です.githubで公開しているので興味のある方はどうぞ.
app/models/user.js
extendModel: function(Model) {
_.extend(Model.prototype, {
/* validateプロパティだけど呼び出す時はisValid() */
validate: function(attrs){
this.errorMsg.length = 0;
for(var key in attrs){
var value = attrs[key];
switch(key){
case 'name':
if(value.length <= 0 || 20 < value.length){
this.errorMsg.push('名前は1文字以上20文字以下です');
}
break;
case 'age':
if(value.length <= 0 || isNaN(value)){
this.errorMsg.push('年齢は数字のみです');
}
break;
case 'email':
if(!(/^[A-Za-z0-9]+[\w-]+@[\w\.-]+\.\w{2,}$/.test(value))){
this.errorMsg.push('Eメールが正しくありません');
}
break;
}
}
if(this.errorMsg.length) return 'Error';
},
errorMsg: []
});
return Model;
}
こんな感じにerrorMsgを配列にして,validateに引っかかったらエラーメッセージをpushしていくようにしました.
あと,何度もvalidateに引っかかるとエラーメッセージがどんどん蓄積されてしまうので,this.errorMsg.length = 0てな感じで毎回配列を初期化しています.
errorMsgの型を変更したのでcontroller側も1行変更しましたが,1行なのでここには載せません.
ゆるぼ
lengthプロパティを0にして初期化するのはどうなのでしょうか?
「そのような初期化よりもこっちの初期化の方がいいよ」といった方法があれば教えてください.