2012-03-15 3 views
2

私はBackboneを新しいプロジェクトに使用していますが、これまでのところそれを愛していましたが、私は邪魔にならないようになりました。バックボーンModel.save()はイベントへのすべてのバインディングを無効にします

モデル全体を説明せずに、モデルを保存すると、応答がサーバーから戻って再び解析され、新しいサブオブジェクトが作成され、以前に付けていたオブジェクト。

私はContentCollection(そのBackbone.Modelないコレクション)を保存する場合には、サーバーから戻って来るときたとえば、応答が解析され、すべて私がthis.contentItemsに持っていた結合を壊すthis.contentItemsの新しいコレクションを作成します。これを回避する方法はありますか?何とか応答を解析しないようにバックボーンに伝えますか?バインディングを元のリストから取り出して、新しいリストに再度添付しますか?

App.ContentCollection = Backbone.Model.extend({ 
    urlRoot: '/collection', 

    initialize: function() { 
    }, 

    parse: function(resp, xhr) { 
     this.contentItems = new App.ContentList(resp.items) 
     this.subscriptions = new App.SubscriptionList(resp.subscriptions) 

     return resp 
    }, 

    remove: function(model){ 
     this.contentItems.remove(model) 
     this.save({'removeContentId':model.attributes.id}) 
    }, 

    setPrimaryContent: function(model){ 
     this.save({'setPrimaryContent':model.attributes.id}) 
    } 
}) 

誰もこれまでに遭遇したことはありますか?

答えて

3

ここでの問題は、あなたがparse()メソッドを使用している方法だと思います。バックボーンは、このメソッドがサーバレスポンスを受け取り、何らかの形でオブジェクトを変更するためにではないではないハッシュを返します。だから、バックボーンはsave()の中でthis.parse()を呼び出し、副作用はないと期待していますが、.parse()をオーバーライドしたように、関数を呼び出すとモデルが変更されます。

App.ContentCollection = Backbone.Model.extend({ 

    initialize: function() { 
     this.bind('change', initCollections, this); 
    }, 

    initCollections: function() { 
     this.contentItems = new App.ContentList(resp.items); 
     this.subscriptions = new App.SubscriptionList(resp.subscriptions); 
     // now you probably want to unbind it, 
     // so it only gets called once 
     this.unbind('change', initCollections, this) 
    }, 

    // etc 
}); 
+0

'parse'が' 'fetch'とfetch'によって呼び出されます:あなたが最初の呼び出しfetch()、何かのようにするとき

私は過去にこのユースケースを扱ってきた方法は、コレクションを初期化することです'parse'の後の' reset'は呼び出されます(http://stackoverflow.com/a/9675974/479863)。バックボーンのおめでとう。数時間後にピンクになるブロンズ。 –

+0

@muistooshort - その場合も、 'parse'は副作用がないと期待されます(私たちはここに同意していると思います)。ありがとう! – nrabinowitz

+0

はい、私たちは同意しています、 'parse'は単純なデータ変換器であると考えられていますが、それが使用されている特定のコンテキストが副作用を悪い考えにしています。 –

関連する問題