Javascript 主干中的类方法
我正在尝试使用主干网通过designe(Rails的认证gem)实现认证。用户可以通过向Javascript 主干中的类方法,javascript,backbone.js,devise,Javascript,Backbone.js,Devise,我正在尝试使用主干网通过designe(Rails的认证gem)实现认证。用户可以通过向/Users/sign\u out/发送删除请求来注销主干网,因此我无法使此链接正常工作,因为如果我单击它,它将是一个get请求 <li><a href="/users/sign_out" class="thumbnail plain">sign out</a></li> 这显然是个坏主意,但我不知道还能做什么。你能推荐我应该做什么吗?有没有一种方法可以使注销
/Users/sign\u out/
发送删除请求来注销主干网,因此我无法使此链接正常工作,因为如果我单击它,它将是一个get请求
<li><a href="/users/sign_out" class="thumbnail plain">sign out</a></li>
这显然是个坏主意,但我不知道还能做什么。你能推荐我应该做什么吗?有没有一种方法可以使注销成为一个类方法,这样我就不必实例化一个新模型来注销或做其他事情
更新
这是用户模型中的createUser方法,它将注册数据发送给designe。在成功回调中,它将会话分配给变量window.app.current\u user=userSession代码>。我在用户模型上也有一个注销方法,我尝试像这样从路由器调用它
在路由器中注销
logout: function(){
window.app.current_user.logout();
}
--
我有点困惑,当用户模型还没有创建时,为什么要触发注销功能。你能解释一下你的路由器有这个注销功能的原因吗
就个人而言,我会有一个会话模型来监听链接的点击事件。这将调用一个注销方法,该方法将发出删除请求
更新
下面是一个快速的JSFIDLE,它显示了如何创建模型并将其附加到全局变量:
请注意,这只是一个示例,我怀疑您是否希望在模型中存储密码
此外,您应该能够使用主干模型的fetch(GET)、save(POST/PUT)、destroy(DELETE)方法,而不是直接在模型中编写ajax请求。如果需要,您可以覆盖模型同步方法。我在用户模型上也有一个登录方法。用户登录,但我没有会话,如果我有一个带有注销方法的会话模型,那么我仍然需要一个会话实例来调用注销,这与我描述的用户模型的问题类似。然而,我确信我做的都是错的,所以如果你能给我一些关于如何用javascript保持会话进行的建议,这样我就可以调用注销了,那将是非常困难的helpful@Leahcim:如果您有一个用户,您可以调用登录
,那么为什么不在某个地方保留对该用户的引用,以便您可以调用注销
是吗?@muistooshort所以只需将登录名的响应分配给成功回调中的currentUser变量(分配给登录名)?将currentUser保留为全局变量?调用login时,应实例化用户模型并使其在整个应用程序中可用,以便可以引用它。我确实实例化了用户模型,但不知道如何使其在整个应用程序中可用。
logout: function(){
window.app.current_user.logout();
}
app.Models.User = Backbone.Model.extend({
initialize:function () {
},
createUser: function() {
var user = {};
user['email'] = this.get("email");
user['password'] = this.get("password");
user['password_confirmation'] = this.get("password_confirmation");
var registration = {};
registration['user'] = user;
var _this = this;
$.ajax({
url: '/users.json',
type: "POST",
data: {user: user, registration: registration},
success: function(userSession, response) {
window.app.current_user = userSession;
},
... code ommitted
logout: function(){
var me;
console.log("Logging out...");
me = this;
return $.ajax({
url: '/users/sign_out',
type: "DELETE",
dataType: "json",
success: function(data, textStatus, jqXHR) {
window.app.current_user = '';
},
error: function(jqXHR, textStatus, errorThrown) {
return alert("Error logging out: " + errorThrown);
}
});
},
var User = Backbone.Model.extend({
initialize:function () {
this.name = "MyName";
this.password = "password"
},
login:function(){
console.log("login called");
},
logout: function(){
console.log("logout called");
}
});
window.MyModels = window.MyModels || {};
window.MyModels.User = new User();
console.log(window.MyModels.User.login());
console.log(window.MyModels.User.logout());