2013-02-16 82 views
1

我得到了这个非常简单的模型客户骨干上没有保存

define([ 
], function() { 
    Guest = Backbone.Model.extend({ 

    urlRoot : ftd.settings.rest + '/guest', 

    defaults: { 
     id : '', 
     name : '', 
     accessToken : '' 
    }, 

    validate: function(attr) { 
     var errors = []; 
     if(attr.name.length < 4) { 
     errors.push({message : "You nickname, must be atleast 4 chars", name : 'guestNickname'}); 
     } 
     return errors; 
    } 
    }); 

    return Guest; 
}); 

然后我得到了一个头版来看,凡客签约点击提交按钮时,basicly这种情况发射请求。

createGuest: function(ev) { 
    ev.preventDefault(); 
    // Get nickname. 
    var guest = new Guest(); 
    guest.bind('error', function(model, errors) { 
     _.each(errors, function(err) { 
     $('input[name=' + err.name + ']').addClass('invalid'); 
     // add a meesage somewhere, using err.message 
      }, this); 
    }); 

    guest.save({ 
    'name' : $('input[name="guestNickname"]').val() 
    }, { 
    wait:true, 
    success:function(model, response) { 
     console.log('Successfully saved!'); 
    }, 
    error: function(model, error) { 
     console.log(error); 
    } 
    }); 
}, 

所以我从我的输入元素名称,我把它放到保存方法。问题是,Backbone不向服务器发送请求,只是触发错误事件。其中打印一个空的错误数组。 我在做什么错?

回答

1

如果validation成功,你应该不会返回任何东西。

由于您正在返回一个空数组,因此它假定该数组是验证错误。

试试这个:

validate: function(attrs) { 
     var errors = []; 
     if(attrs.name.length < 4) { 
     errors.push({message : "You nickname, must be atleast 4 chars", name : 'guestNickname'}); 
     } 
     if(errors.length > 0){ 
      return errors; 
     } 
    }