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 为此接受 POST 到 /users/login。如何向我的模型添加一个函数“logIn”,它将使用自定义同步/传递 options.url 来同步 - 或任何其他方式 - 将 POST 到 /users/login ?

注销: API 接受 POST 到 /users/logout - 如何使用我的骨干模型发送此请求?

用户 ID: 这里对于 GET /users/:id 有同样的问题

更新用户: POST /users/:id - 再次提出同样的问题。

--- 所以实际上,简而言之,问题是 ---

实现骨干模型方法的最佳方法(或最“正确”)是什么,类似于“model.save()” - 但只是 POST/GET 到与 urlRoot 稍有不同的路径?

4

1 回答 1

1

您可能在这里有几个选择。一种是以支持您想要的网址的方式构建您的模型。例如,有一个User模型和一个Session模型分别处理更新用户和管理登录状态。

您可能应该做的另一件事是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 回答