2016-06-26 2 views
0

を発射する前に、私は、リスナーとのバックボーンコレクションとコレクションビューを持っている:プロセスバックボーンコレクションフェッチされたデータにイベント

this.listenTo(this.collection, 'reset', this.render); 

は、その後、私はこれを行ういくつかの点で:

myCollection.fetch({ 
    reset: true, 
    success: myCallback 
}) 

私が欲しいものいくつかを行うことですページ上で何が起きているかによって、モデルが変更されたり(削除されたり、それらの一部が置き換えられることさえあります)。そして私はの前にビューをレンダリングします。現在私はmyCallbackでそれをやろうとしていますが、レンダリング後に呼び出されることがあります。

イベントの前にフェッチされたデータを処理するにはどうすればよいですか?

Backbone.Collection.extend({ 
parse: function(response){ 
    // modify response here 
    return response; 
} 
}); 

それとも何らかの理由でモデルが、その後作成された後、あなたが実際のモーダルインスタンス上でコードを実行する場合:イベントは次のようにトリガする前に

答えて

1

あなたがフェッチされた応答を変更するために、コレクションのparse方法を使用することができます

myCollection.fetch({ 
    reset: true, 
    success: function(collection, response){ 
    // modify response here 
    view.render(); 
    } 
}) 

またはモーダルを操作して、同じようにレンダリング呼び出し、別のコールバックを持っている:

をあなただけ手動でのようなイベントリスナーの代わりにレンダリング呼び出すことができます
Backbone.View.extend({ 
    initialize: function(){ 
    this.listenTo(this.collection, 'reset', this.preRender); 
    }, 
    preRender: function(){ 
    // manipulate models here 
    this.render(); 
    }, 
    render: function(){ 
    // Actual rendering here 
    } 
}); 
+0

私は2番目の解決策は私が必要とするものだと思います。しかし、コレクション内で表示するリンクを格納する代わりにレンダリングのためにイベントをトリガする方が良いのではないでしょうか? –

+0

@DenisK。 * "いいえ、私の2番目の例は、' myCollection.fetch({{ビューの内側、またはルーター、自分自身への参照を持っています。あなたのコレクションコンストラクタが 'myCollection'のようなコレクションインスタンスにアクセスできる場合は、デザインに何か問題があります...もしあなたがイベントにこだわりたいのであれば、私は代替案を追加しました。 –

関連する問題