3

一連の AJAX 呼び出しが完了し、サブビューに渡すコレクションが正常に読み込まれるまでビューのレンダリングを待機させるために、レイアウト マネージャーで問題が発生しています。

これが私の初期化関数です:

initialize : function(){
            var collection;

            collection = new BobLawBlaw.Collection();
            collection.fetch();

            this.collection = collection;
        }

私のフェッチは少し複雑です:

fetch : function(){
            var that = this;

            return $.when.apply(null, TL.reporting.getData.call(this, 125)).done(function(xhr1, xhr2){
                var data1 = xhr1[0].data, data2 = xhr2[0].data, dates = data1.date,

                // do a bunch of stuff with the data i get above to construct the models how i need
                models = [
                   // bunch of objects using the data
                ];

                that.add(models);
            });
        }

そのgetData関数は、2 つの ajax 呼び出しから deferred を収集し、それらを配列で返すため、done両方の呼び出しが完了したときにその関数がトリガーされるようにします。これは期待どおりに機能し、必要なすべてのデータを取得できます。

ただし、フェッチがトリガーされても初期化関数のフローは停止しないため、LayoutManager が beforeRender に進む前にコレクションにデータが入力されません。どうすれば非同期にフェッチできますが、両方の ajax 呼び出しが完了してコレクションにデータが入力されるまで初期化関数を待機させることができますか?

4

2 に答える 2

2

バックボーンの方法で実行したい場合は、doneコールバックで「リセット」イベントをトリガーする必要があります。次に、ビューでこのイベントをリッスンしてrender関数を起動します。をに置き換えるthat.add( models )that.reset( models )、モデルが追加され、イベントがトリガーされます。

次に、ビューの初期化関数で:

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

そして、this.renderフェッチが完了すると関数が呼び出されます。

于 2013-06-13T22:51:02.333 に答える