5
  1. 200 以外の値を取得した場合、サーバーからの ember-data の現在のデフォルトの予期される応答は何ですか?

    例 {"エラー":{jsonerror}} ???

  2. Ember でサーバーエラー応答 (json 形式) を処理するにはどうすればよいですか?

ありがとう!

4

2 に答える 2

16

@coymba はほぼ正しいと思いますが、より簡単に起動して実行できるように、より精巧な回答を作成しようと思います。

新しいルーターのフェイスリフトですでに述べたように、ルートに遷移しようとすると、いずれかのフックがbeforeModelエラーをスローするか、拒否する promise を返す可能性があります。この場合、部分的に入力されたルートでイベントが発生します。 、ルートごとにエラーを処理できます。modelafterModelerror

App.SomeRoute = Ember.Route.extend({
  model: function() {
    //assuming the model hook rejects due to an error from your backend
  },
  events: {
   // then this hook will be fired with the error and most importantly a Transition
   // object which you can use to retry the transition after you handled the error
   error: function(error, transition) {
     // handle the error
     console.log(error.message);
     // retry the transition
     transition.retry();
  }
});

アプリケーション全体でエラーを処理したい場合は、 のハンドラーerrorをオーバーライドして独自のグローバル デフォルト ハンドラーを定義できます。これは次のようになります。errorApplicationRoute

App.ApplicationRoute = Ember.Route.extend({
  events: {
    error: function(error, transition) {
      // handle the error
      console.log(error.message);
    }
  }
});

eventsデフォルトでは、ハッシュで定義されたハンドラーがイベントを処理すると、イベントのバブリングが停止することを考慮してください。ただし、 までイベントをバブリングし続けるには、そのハンドラーからApplicationRoute戻る必要があります。これtrueにより、より多くのハンドラーに通知することがerrorでき、そこから でルートへの移行を再試行できますtransition.retry()

ember 1.0 以降のアップデート

新しい ember リリース 1.0 以降、eventsハッシュの名前が に変更されましたactions。ルートのエラー ハンドラーはactionsハッシュに含まれている必要があります。

App.ApplicationRoute = Ember.Route.extend({
  actions: {
    error: function(error, transition) {
      // handle the error
      console.log(error.message);
    }
  }
});

これがお役に立てば幸いです。

于 2013-07-13T12:17:48.557 に答える