3

バックボーンを学び始め、Person Model内で簡単な検証を行おうとしましたが、新しい年齢を設定すると、validateメソッドが実行されないようです。誰かが私がこれでどこで間違っているかもしれないか説明できますか?私がこれを正しく理解するまで、私の学習を続けたくありません。

JS

var Person = Backbone.Model.extend({

    defaults: {
        name: 'John Doe',
        age: 30,
        occupation: 'working'
    },

    validate: function(attrs) {

        console.log(attrs);

        if ( attrs.age < 0 ) {
            return 'Age must be positive, stupid';
        }

        if ( ! attrs.name ) {
            return 'Every person must have a name, you fool.';
        }

    },

    work: function() {
        return this.get('name') + ' is working.';
    }

});

現在、コンソールで値を取得して設定しているだけなので、次のようになります。

var person = new Person({
    name: 'Lady Madonna',
    age: 23
});

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

年齢を負の値に設定すると、validateメソッドが有効になりません。

person.set('age', -55);
4

3 に答える 3

10

バックボーン0.9.10でモデル検証が変更されました:

{validate:true}モデルの検証は、デフォルトでModel#saveでのみ適用されるようになり、オプションが渡されない限り、構築時またはModel#setでデフォルトで適用されなくなりました。

と注意してください

モデル検証で、エラーではなく無効なイベントが発生するようになりました。

したがって、コードは次のように記述する必要があります

var person = new Person({
    name: 'Lady Madonna',
    age: 23
});

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

person.set('age', -55, {validate : true});

そしてフィドルhttp://jsfiddle.net/nikoshr/aUxdS/

于 2013-03-25T12:31:36.990 に答える
3

デフォルトでvalidate()は、メソッドを呼び出す前に呼び出されsave()ます。の前にも呼び出すset()場合は、{validate:true}オプションを指定する必要があります。次に例を示します。

person.set({ age : -55 }, { validate : true });
于 2013-03-25T12:30:39.350 に答える
0

これは私がしばらく前に書いた例です。それが役に立てば幸い:

それで、あなたが動物と呼ばれるモデルを持っているとしましょう:

var Animal = Backbone.Model.extend({
    defaults:  {
        name: '',
        speech: ''
    },
    validate: function(attribs) {
        if(attribs.name === ''){
            return "Your animal does not have a name.";
        }
    },
    initialize: function() {
        console.log('New Animal creation');
        this.on("change:name", function() {
            console.log("Change captured");
        });
        this.on("error", function(model, error) {
            console.log(error);
        });
    }
});

したがって、JavaScriptのどこかでこれを行う場合:

var dog = new Animal();
dog.set('speech', 'kef');

次のメッセージ/エラーが表示されます。

"Your Animal does not have a name."

これで、新しいオブジェクト「dog」を作成するときに検証が呼び出されなくなります。dog.set()を使用して、実際にwelとして設定する必要があります。

それ以外の場合、エラーは発生しません。

後で値を変更しても、このエラーが発生しない場合があります。(あなたは本当に私が推測するセットを使用する必要があります)。

ただし、次のように、モデルが有効な状態にあるかどうかをいつでも確認できます。

Model.isValid().

モデルが無効な場合、これはfalseを返します。したがって、この:

var dog = new Animal();
dog.isValid(); //would return a 'false' 

dog.set({
    'speech': 'kef',
    'name': 'fido'
});
dog.isValid(); //would return a 'true'

お役に立てれば!

于 2013-03-25T12:37:45.893 に答える