LoginSignup
1
1

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-09-08

前回に引き続き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側でエラーメッセージを取得できたのでうまくいったのかなと思います.

シミュレータで確認

Image1
名前の部分を入力せずに「登録」を押すと
Image2
のようにアラートが出てきます.うまくいきました.:)
ついでに他の入力がvalidateで引っかかった場合は
Image3
Image4
こんな感じでエラーメッセージを取得してくることができました.

1
1
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
1
1