11

以下のコードで検証関数が呼び出されていません:-

var Vehicle = Backbone.Model.extend({
    color: 'green',
    validate: function (attrs) {
        var validColors = ['white', 'red', 'blue', 'yellow'];
        var colorIsValid = function (attrs) {
            if (!attrs.color) return true;
            return _.contains(validColors, attrs.color);
        }
        if(!colorIsValid(attrs)) {
            return "color must be one of: " +validColors.join(",");
        }
    }
});

var car = new Vehicle();

car.on('error', function (model, error) {
    console.log(error);
});

console.log(car.get('color'));
car.set('color', 'muave');

フィドルhttp://jsfiddle.net/vineet85/Fa8jr/5/を参照してください

検証関数が呼び出されない理由を誰かに教えてもらえますか?

4

2 に答える 2

33

Backbone.jsでは onではなく on がvalidate自動的に呼び出されます。saveset

値を設定するときに検証を実行する場合は、validateオプションを使用する必要があります。例えば

car.set('color', 'muave', {validate: true});

http://backbonejs.org/#Model-validateを参照してください

このerrorイベントは、オブジェクトを保存しようとしたときに、通常はサーバーでエラーが発生したときにトリガーされます。http://backbonejs.org/#Events-catalogを参照

検証の失敗をキャッチしたい場合は、invalidイベントを処理してみてください。

car.on('invalid', function (model, error) {
    console.log(error);
});
于 2013-01-21T19:10:40.710 に答える
0

検証を実行するには、追加のコードを記述する必要があるようです。以下のように:

car.set('color', 'muave', {validate:true});
于 2014-04-07T13:16:00.070 に答える