2014-06-09 2 views
0

백본 테스트 응용 프로그램을 수행하고 있습니다. 나는 그것을 검증하기로 결정한다. 유명한 검증 된 thedersen의 백본 중 하나를 사용하고 있습니다. 유효성 검사가 제대로 작동하지 않습니다. 여기 내 출처 중 하나가 문제를 파악하는 데 도움이됩니까?Backbonejs - 유효성 검사에서 제대로 함수를 호출하지 않음

jQuery(document).ready(function($) { 

    _.extend(Backbone.Validation.callbacks, { //is this wrong place? 
     valid: function (view, attr, selector) { 
      console.log("valide"); //i am not getting any console 
     }, 
     invalid: function (view, attr, error, selector) { 
      console.log('not valide'); //i am not getting any console 
     } 
    }); 



    var Person = Backbone.Model.extend({ 
     defualts : { 
        first_name : 'qwe', 
        last_name : 'ewq', 
        id : 0 
     }, 
     validation: { 
      first_name: { 
       required: true, 
       msg: 'Please enter a valid first_name' 
      }, 
      last_name: { 
       required: true, 
       msg: 'Please enter a valid last_name' 
      } 
     } 

    }); 

    var PersonCollection = Backbone.Collection.extend({ 
      model : Person 
     }); 

    var idGen = 1; 

    var PersonView = Backbone.View.extend({ 
     el : $("#personDisplay"), 
     tmpl : _.template($("#personTemplate").html()), 
     editTmpl : _.template($("#editPersonTemplate").html()), 
     initialize:function(){ 

     }, 
     render : function() { 
      if (this.model.id != 0) { 
        $(this.el).append(this.tmpl(this.model.toJSON())); 
      } else { 
        $(this.el).append(this.editTmpl(null)); 


       } 

//when below uncommitted it works, but i am getting 3 consoles. 

       // var isValid = this.model.isValid('first_name'); 
       // console.log('isValid', isValid); 
     } 
    });   

    var PersonMasterView = Backbone.View.extend({ 

      el : $("#displayForm"), 
      editTmpl : _.template($("#editPersonTemplate").html()), 

      events : { 
        "click #addUser" : "addUsr", 
        "click #save" : "add" 
      }, 

      initialize : function() { 

        this.collection = new PersonCollection(); 
        this.render(); 
        Backbone.Validation.bind(this); 
      }, 

      render : function() { 
        // 
        $("#personDisplay").html(''); 

        _.each(this.collection.models, function(item) { 
          //alert('collection iteratin->'+item.id); 
          var perView = new PersonView({ 
            model : item 
          }); 
          perView.render(); 
        }, this); 

      }, 

      add : function(e) { 
        e.preventDefault(); 
        idGen = idGen + 1; 
        var data = (Backbone.Syphon.serialize(this)); 
        var that = this; 
        data.id = idGen; 
        // console.log(data); 
        this.collection.add(data); 
        this.render(); 
      }, 

      addUsr : function() { 
        var prsn = new Person({ 
          id : 0 
        }); 
        this.collection.add(prsn); 
        this.render(); 
      } 
    }); 

    var pView = new PersonMasterView(); 
    Backbone.Validation.bind(pView); 

}); 

답변

0

다음과 같이 코드가 업데이트되었습니다. 정상적으로 작동합니다. 덕분에

var PersonView = Backbone.View.extend({ 
     el : $("#personDisplay"), 
     tmpl : _.template($("#personTemplate").html()), 
     editTmpl : _.template($("#editPersonTemplate").html()), 
     initialize:function(){ 
      Backbone.Validation.bind(this); 
     }, 
     render : function() { 

      var status = this.model.isValid(true); 

      if (this.model.id != 0) { 
        $(this.el).append(this.tmpl(this.model.toJSON())); 
      } else { 
        $(this.el).append(this.editTmpl(null)); 
      } 
     } 
    });  
관련 문제