0

由于我已将 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()
4

1 回答 1

3

在 Backbone 0.9.9 中,模型验证的语义发生了变化,因此验证应确保模型永远不会处于无效状态,即使在模型初始化时也是如此。有了这个更改,模型实例化将失败,因为 rule attrs_.message.toString() is @.defaults.message.toString(),并且没有办法绕过它。

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

同时,您可以更改验证逻辑、返回到较早发布的版本或使用未发布的主版本,风险自负。

于 2013-01-03T14:01:13.603 回答