0

私のアプリは、クライアント側の Backbone.js、バックエンドの Express.js です。

バックボーン モデルとコレクション (urlRoot: "/users" を使用) を使用して、API のすべての部分との同期に問題があります。 GET または POST のみを使用でき、PUT または DELETE は使用できません。 *これ以上のモデルの使用は許可されてい ません* jQuery ajax の使用は許可されていません

私のAPI

新しいユーザーの追加: 新しいデータの JSON を /users に POST する必要があります。だから私はそれをうまくやった -this.model.save({new data...})

すべてのユーザーをリストします: そのための私の API、GET /users への応答、適切なハンドラーを使用した - そう、this.collection.fetch()- 正常に動作します。

ログイン: 私の API は、そのために /users/login への POST を受け入れます。/users/login に POST するカスタム sync/pass options.url を使用して同期する関数「logIn」をモデルに追加するにはどうすればよいですか?

ログアウト: API は /users/logout への POST を受け入れます - バックボーン モデルを使用してこのリクエストを送信する方法は?

User By ID: GET /users/:id についても同じ質問があります

ユーザーの更新: POST /users/:id - 同じ質問をもう一度。

--- 要するに、質問は ---

「model.save()」に似たバックボーン モデルのメソッドを実装するための最良の方法 (または最も「正しい」) は何ですか?

4

1 に答える 1

1

ここにはおそらくいくつかのオプションがあります。1 つは、必要な URL をサポートする方法でモデルを構造化することです。たとえば、ユーザーの更新とログイン状態の管理を別々に処理Userするモデルとモデルを用意します。Session

おそらく行うべきもう 1 つのことはurl、モデルでメソッドを使用することです。

あなたのUserモデルではこのようなものです。(注:ここurlRootの代わりに使用するurlことは同じですが、これは、URL で必要とされるより複雑なものに対する正しいアプローチです)

url : function() {
  var base = "/users/";
  if(this.isNew()) {
    return base;
  } else {
    return base + this.get("id");
  }
}

この同じ概念を拡張して、新しいかSessionどうかに基づいてログアウトとログインを処理するモデルで機能させることができます。Session

アップデート:

同じモデルを使用する必要がある場合は、メソッドを完全にバイパスし、Backbone.syncクリーンアップする方法を知っている成功/エラー ハンドラーを使用してカスタム AJAX 呼び出しを作成することをお勧めします。

login : function() {
  $.post("/users/login", {success: function (response) {
      // Update user as needed
    }, error: function (xhr, response) {
      // Handle errors
    }
  }
}
于 2012-11-18T23:59:52.433 に答える