2013-01-03 91 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