4

success/errorBackbone.js のメソッドのコールバックについて質問を受けました。私はこれに慣れていないので、私の質問は単純なものに見えるかもしれません。

私が知る限り、save()またはfetch()モデルのメソッドが起動するのは、サーバーにエラーsuccess(例外など)がない場合です。問題は、クライアント側でエラーの種類を取得するために、サーバーで例外をスローする必要があるかどうかです。私が言いたいことの例を挙げましょう:

たとえば、アプリの新しいユーザーを作成する Web 上の UI があります。私のクライアント側は次のようになります。

var userView = Backbone.View.extend({

   initialize:function(){ ... },
   events: {
     'click #sign_up': 'createAccount'
   },
    createAccount: function() { 
      login = $('#login').val();
      password = $('#password').val();
      var user = new User(); // User is a model
      user.save({login: login, password: password},{
            success: function(data) {
               if (data != null) {
                  alert('success');                       
               } else {
                   alert('fail');
               }

            },
            error : function() {
                alert('error');     
            }
   }
});

したがって、サーバー側は次のようになります。

@Controller
@RequestMapping("/users")
public class UsersController {

@RequestMapping(method = RequestMethod.POST)
public @ResponseBody User createUser(@RequestBody User user) throws Exception {


    if (user == null || !user.isValid()) {
        return null;// not valid - error message 1
    }
    if (userDao.getUserByLogin(user.getLogin()) != null) {
        return null;// such user already exists! - error message 2
    }

    userDao.saveUser(user);

    return user;
}

私が望むのは、それに応じて適切なエラーメッセージを送信できることです。を返すnullと、 コールバック内のデータsuccessは、リクエストを送信する前に入力したばかりのモデルになります。例外をスローすると、それが発生しerrorます。この時点で、自分のニーズを満たすためにどのようなアプローチをとればよいでしょうか。

4

1 に答える 1

4

例外をスローしないでください。できますが、サーバー側で例外を処理し、正しい HTTP コードのみを返す必要があります。

例えば

サーバー側でユーザーが見つからない場合、通常は 404 HTTP ステータス コードを返します。404 はエラー コールバックを起動します。

エラー コールバックには、サーバー上で何らかのデータを渡したい場合 (エラー メッセージなど) に備えて、複数の引数があります。ドキュメントによると:

"error" (model, xhr, options) — when a model's save call fails on the server.

xhr オブジェクトでエラー メッセージにアクセスできます。

于 2013-02-22T10:23:55.410 に答える