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 では、モデルの検証のセマンティクスが変更されたため、検証では、モデルが初期化されている場合でも、モデルが無効な状態にならないようにする必要がありますこの変更により、ルールによりモデルのインスタンス化が失敗し、attrs_.message.toString() is @.defaults.message.toString()それを回避する方法はありません。

ただし、変更は後でロールバックされ、モデルを保存するまで無効な状態を許可するように検証が緩和されました。これは次の Backbone リリースで利用可能になると思いますが、当面はこの変更を含む公開バージョンはありません。この GitHub の問題ページでは、0.9.9 で変更が行われた理由と、次のバージョンでどのように変更されたかについて説明しています。

それまでの間、検証ロジックを変更するか、以前にリリースされたバージョンに戻すか、リリースされていないマスター バージョンを自己責任で使用してください。

于 2013-01-03T14:01:13.603 に答える