1

検証に失敗するデータを設定する

Model.set({phoneNumber : 'meow meow'})

境界線の色を適用する検証

validate: function(attr){
    if(attr.phoneNumber){
        var phoneNumber = attr.phoneNumber,
            regex = /^\([0-9]{3}\)\s[0-9]{3}-[0-9]{4}/;
        if(!regex.test(val)){
            View.showError('businessNumber');
        }
}
  • 後でfocus入力フィールドのユーザーで、エラーのスタイリングを削除します
  • ユーザーは何も変更せず、blurイベントが発生します
  • 何も変更されていないため、検証は実行されません。
4

1 に答える 1

1

モデルからビューを直接参照しないでください。これは、Model/View/* 設計核となる信条に対する完全に根本的な違反です。呼び出しsetて検証が失敗すると、モデルはerror(Backbone 0.9.9 以降) イベントを発行し、ビューはそれをリッスンし、それに応じてビューを更新して応答します。代わりにコールバックを渡しsetてエラーを処理することもできますが、ほとんどの状況ではイベントの方が適しています。モデルは から実際にエラー オブジェクトを返す必要があることに注意してください。validateこれはデータの更新を拒否するため、ユーザーが入力を修正してblur発生した後、データは実際に変更されます。validateコードをそのまま使用すると、エラーが返されないため、Backbone は呼び出しが成功したと見なします。

ビューでは、モデルのエラー オブジェクトを UI 警告に変換する方法を示す擬似コードを次に示します。

initialize: function () {
    _.bindAll(this);
    this.model.on('error', this.showError);
},

showError: function (error) {
    if (error.businessNumber) {
        this.$businessNumber.addClass('error');
    }
}

補足として、フォームにバックボーンを使用する方法について混乱することを気にしないでください。そのままでは無効なデータを受け入れないという事実setは、大きな障害であり、直感的ではありません。フォームと検証の両方に役立つプラグインがあります (https://github.com/documentcloud/backbone/wiki/Extensions,-Plugins,-Resources)。背骨。

于 2013-01-18T06:05:28.980 に答える