Spina dorsale di Convalida non funziona

Sto usando la spina Dorsale del validate funzione di garantire Man avere un age proprietà di più di 18. Ecco il mio codice:

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});

Ma guardando il risultato sembra che validate non funziona.

 

4 Replies
  1. 42

    In Backbone.js (prima versione 0.9.10), validate è chiamato prima di save come prima set.

    Si otterrà un avviso di errore quando si imposta non valido valore.

    Esempio – age valore è al di sotto dei 18 :

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

    MODIFICA

    Per Backbone.js versione 0.9.10+ c’è un problema segnalato: Convalida non riuscita non l’errore di trigger di callback. Problema spiegazione dice che

    invalid evento deve essere utilizzato invece di error

    Modo da cambiare il vostro codice:

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

    E impostazione variabile con validate opzione è impostata su true attivazione di una alert.

    man.set({age: 12}, {validate : true});
    • ancora ottenere nulla.
    • Che versione di Backbone.js utilizzi? Che comportamento deve cambiare con 0.9.10
    • avete ottenuto !0.9.10,quindi cosa devo fare ,quindi
    • Grazie mille. U rock
    • Yowch. Antipatia l’opzione esigenza!! github.com/documentcloud/backbone/issues/2174
    • così ora è necessario comunicare esplicitamente spina dorsale per convalidare? Sembra un po ‘ una schifezza!!
    • Grazie! Era solo per postare una domanda su questo 🙂

  2. 8

    Dorsale v. 1.0.0

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

    Esempio 1. Senza {convalidare:true}

    //Object will be created with invalid attribute 'age' 
    var man = new Man({name : 'qian', age : 12});
    console.log(man) //Returns an object with invalid attributes
    
    //But we'll use only valid objects.
    //Also we'll get the error message in alert, if validation fails.
    if(man.isValid()){
        alert( man.get('name') );
    }
    
    var man = new Man({name : 'qian', age : 19});
    if(man.isValid()){
        alert( man.get('name') );
    }

    Esempio 2. Con {convalidare:true}

    //Object will be created without any passed attributes
    var man = new Man({name : 'qian', age : 12}, {validate:true});
    console.log(man) //Object will be without passed attributes
    
    /* man.isValid() returns 'true' throw we passed invalid attrs.
       We won't see any error alert message, because Backbone created empty object */
    /* Doesn't work */
    if(man.isValid()){
        alert( man.get('name') ); //undefined
    }
    /* Works */
    //Created model had invalid attrs, so validationError won't be empty.
    //If all attrs are valid, validationError will be empty
    if(!man.validationError){
        alert( man.get('name') );
    }
  3. 4

    Se si utilizza una nuova versione(>1.0), della spina Dorsale e desidera fuoco di convalida al momento della model.set metodo,

    quindi è necessario passare {validate: true} a fuoco di convalida.

    utilizzare

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

    O

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

    invece di

    model.set({field:value})

    RIF : Spina dorsale cambiare registro

Lascia un commento