22

私は Backbone の関数を使用して、 18 以上のプロパティを持つことvalidateを保証しています。私のコードは次のとおりです。Manage

var Man = Backbone.Model.extend({
    initialize : function(){
        this.on("error",function(model,error){
            alert(error);
        });
    },
    validate : function(attrs,options){
        if (attrs.age < 18){
            return 'below 18';
        } 
    }
})

var man = new Man({name : 'qian', age : 12});

しかし、結果を見ると、validateうまくいかないようです。

4

4 に答える 4

42

Backbone.js ( version より前0.9.10) では、validatebefore と before が呼び出さsaveれますset

無効な値を設定すると、アラートエラーが発生します。

例 -age値が 18 未満の場合:

var man = new Man ({name : 'qian', age : 12});
man.set({ age: 12 }); // that will trigger alert

編集

Backbone.js バージョン0.9.10+では、問題が報告されています:検証に失敗しても、エラー コールバックがトリガーされません。問題の説明によると

invalid代わりにイベントを使用する必要がありますerror

したがって、コードを次のように変更します。

var Man = Backbone.Model.extend({
    initialize : function(){
        this.on("invalid",function(model,error){
            alert(error);
        });
    },
    ...

validateオプションを に設定して変数を設定すると、trueがトリガーされますalert

man.set({age: 12}, {validate : true});
于 2013-01-20T16:00:04.843 に答える
4

model.set新しいバージョン(>1.0)の Backbone を使用していて、メソッドの時点でバリデーションを起動したい場合は、

{validate: true}次に、検証を開始するために渡す必要があります。

使用する

model.set({field:value},{validate: true})

また

model.set("field","value",{validate: true})

それ以外の

model.set({field:value})

REF :バックボーン変更ログ

于 2013-08-09T11:09:11.237 に答える
3
var man = new Man({name : 'qian', age : 12}, {validate : true});

編集:

検証メソッドは、param を使用してオプション オブジェクトを渡す場合にのみ機能しますvalidate(バージョン 0.9.9 以降): https://github.com/documentcloud/backbone/blob/master/backbone.js#L539

そして、それはイベントではなくerrorイベントを引き起こしますinvalid

于 2013-01-20T16:13:03.520 に答える