我的应用是用于客户端的Backbone.js,用于后端的Express.js。
我在使用骨干模型和集合与API的所有部分进行同步时遇到了问题(它们使用urlRoot:“ / users”)。 我只允许使用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。 如何在模型中添加“登录”功能,该功能将使用自定义同步/传递options.url进行同步-或通过任何其他方式-将发布到/ users / login?
注销: API接受POST到/ users / logout-如何使用我的主干模型发送此请求?
用户ID:此处针对GET / users /:id的相同问题
更新用户: POST / users /:id-再次相同的问题。
---实际上,简而言之的问题是-
什么是实现骨干模型方法的最佳方法(或最“正确”),类似于“ model.save()”-但仅将POST / GET定位到与urlRoot不同的路径?
您可能在这里有几个选择。 一种可能是通过支持所需网址的方式来构建模型。 例如,具有一个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
是否为新Session
来处理注销还是登录。
更新:
如果必须使用相同的模型,最好的办法是完全绕过Backbone.sync
方法,并使用知道如何清除问题的成功/错误处理程序编写自定义AJAX调用。
login : function() {
$.post("/users/login", {success: function (response) {
// Update user as needed
}, error: function (xhr, response) {
// Handle errors
}
}
}