2013-01-03 90 views
0

由于我已将Backbone从0.9.2升级到0.9.9,因此出现一些错误。验证方法在主干上调用默认属性

当我使用散列默认值实例化新模型时。验证方法是调用以验证这些值并失败。

基本上我想用新消息设置contactModel,但是这个消息应该与默认的不同。这就是为什么在这个模型的实例中验证失败。 由于未在实例中调用验证方法,因此在骨干0.9.2上正常工作。

有人可以解释这是什么问题吗?

这是我BackboneModel:

class ContactModel extends Backbone.Model 

    defaults : 

     message : 'Initial message' 


    validate : (attrs_) => 

     if attrs_.message.toString() is @.defaults.message.toString() 

      return 'Same message' 

     if attrs_.message.length < 55 

      return 'Your message is too short buddy' 


    sync : => 

     #Custom Sync implementation 

这是我BackboneView:

class ContactPageView extends AbstractView 

    id   : 'contact-page' 
    template : null 
    model  : null 

    events : 

     'keypress #contactTextArea'  : 'onKeyPress' 
     'submit #contactForm'   : 'submit' 

    init : -> 

     @model = new ContactModel() 

     console.log @model.get 'message' 

     #Print "undefined" 


     @model.bind "success", @success, this 

     @model.bind "error", @error, this 

     @template = _.template $('#template_page_contact').html() 

回答

3

骨干0.9.9模型验证的语义被改变为使验证应当确保该模型可以从来没有处于无效状态,即使模型初始化。由于规则attrs_.message.toString() is @.defaults.message.toString(),通过此更改模型实例化将失败,并且无法绕过它。

但是,更改后来被回滚,并且验证已放宽,以允许无效状态,直到保存模型。我认为这将在下一个Backbone发行版中提供,但暂时还没有公开发布的版本。 This GitHub issue page讨论了为什么要对0.9.9进行更改,以及它如何在下一个版本中进行更改。

与此同时,您可以更改验证逻辑,返回到早期发布的版本,或使用unreleased master version,风险自负。

+0

谢谢哥们:) – socrateisabot