2013-02-16 184 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; 
     } 
    }