5

私のアプリには、さまざまなユーザー アカウントがあります。私がやろうとしているのは、リソースの URL からコンテンツを取得するloader.gifまで.fetch()を表示し、ビューをレンダリングしてloader、取得が完了したら非表示にすることです。

これで、ユーザーがログインすると、TODO 項目のリストがTodos.fetch成功コールバックによってフェッチされ、loader.gifフェードアウトします。

$("#app").hide();
$(".loader").show();
Todos.fetch({
    success: function(){
            $("#app").show();
            $(".loader").hide();
        }
});

これは、アイテムを持たないユーザーを除くすべてのユーザーに対して正常に機能しますTodo。これらのユーザーの場合、成功のコールバックはトリガーされず、そのままになりloader.gifます。を非表示にする他の方法はありますloader.gifか?


successコレクションにモデルが1つでも追加された場合にのみ関数が呼び出されるようです。コレクションに追加するものが何もない場合successは呼び出されません。

4

1 に答える 1

19

同期する BackboneJS フェッチ デリゲート。sync は、独自に使用する jqXHR オブジェクトを返します。

あなたはただできる:

Todos.fetch({
    success: function(){
            $("#app").show();
            $(".loader").hide();
        }
}).always(function() { $(".loader").hide() });

詳細については、このブログ投稿をご覧ください。

それとは別に、コレクションが空のときにサーバーが有効な json を返すことを確認してください。応答が有効な json でない場合、失敗します。

于 2012-11-13T15:19:53.583 に答える