验证方法在Backbone上调用默认值attrib

时间:2013-01-03 13:49:11

标签: javascript backbone.js

由于我将Backbone从0.9.2升级到0.9.9,我收到了一些错误。

当我使用哈希默认值实例化新模型时。调用validate方法是为了验证这些值并失败。

基本上我想用新消息设置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()

1 个答案:

答案 0 :(得分:3)

在Backbone 0.9.9中,模型验证的语义已更改,因此验证应确保模型永远处于无效状态,即使模型初始化也是如此。通过此更改,模型实例化将失败,因为规则attrs_.message.toString() is @.defaults.message.toString(),并且无法绕过它。

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

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