2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

validateで引っかかった際にModelから複数のエラーメッセージを受け取ってくる

Posted at

前回の記事に対してとある人から「複数のエラーメッセージを一気に見せてくれた方がユーザにとってはありがたいんじゃない?」と言われたので複数のエラーメッセージを取ってこれるようにしました.

ソースコード

※ここに載せているソースコードは一部です.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にして初期化するのはどうなのでしょうか?
「そのような初期化よりもこっちの初期化の方がいいよ」といった方法があれば教えてください.

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?