Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干中的类方法_Javascript_Backbone.js_Devise - Fatal编程技术网

Javascript 主干中的类方法

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> 这显然是个坏主意,但我不知道还能做什么。你能推荐我应该做什么吗?有没有一种方法可以使注销

我正在尝试使用主干网通过designe(Rails的认证gem)实现认证。用户可以通过向
/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());