私は div#game を持っています。ここでは、サーバーからのデータを表示したいと考えています。そのため、初期化関数を使用するときは、ゲーム モデルのサーバーから ajax 呼び出しでデータを要求します。
Game = Backbone.View.extend(
{
id: 'game',
initialize: function ()
{
this.model.on('getGame', function() {});
this.model.getGame();
}
}
バックボーンではコールバックが機能していないように見えるため、トリガーを作成する必要があります。したがって、アプリはgetGame
、サーバーからのデータが返されてモデルの変数に保存されたときにトリガーされるトリガーをリッスンします。
これまでのところ、これはすべてうまくいきます。唯一の問題は、getGame 関数からのすべてのデータの追加が完了したときに、div#game をフェードインさせたいことです。
しかし、model.on(trigger) をオフにすると、初期化関数は getGame() 関数を実行した後に準備ができていると「考える」ため、実際にはサーバーからのデータがまだ追加されていないと思います。
したがって、親 div#all は次を実行します。
this.$el.append(new Game().el);
また、div#game の準備ができていると「考え」、div#game をそれ自体に追加し、fadeIn を与えます。
div#game にはまだサーバー データが含まれていないため、実際に戻ってくると、画像とテキストがフェードインではなく存在するようになります...
この問題を解決する方法を知っている人はいますか? 前もって感謝します!
================================================== ====
解決した
問題は、$.get および $.post 関数の非同期プロパティにありました。これが、結果がサーバーから返される前に初期化の準備が整った理由です。$.ajax に変更し、async: false にしました。これで、プログラムした/必要な順序ですべてがロードされます。
トールマリスさん、詳しく説明していただきありがとうございます。これからトリガーをたくさん使うので重宝すること間違いなしです!