Backbone.js非休息(用户)模型

时间:2012-09-26 20:39:32

标签: javascript backbone.js

我有以下用户模型:

var UserModel = Backbone.Model.extend({
  urlRoot: 'user',
  defaults: {
    fullName: null,
    email: null,
    password: null
  }
});

现在我们可以CRUD(注册,更新信息,删除和获取用户)但是如何:

  • 忘记密码
  • 激活帐户

如何扩展我的UserModel以实现这一目标?

3 个答案:

答案 0 :(得分:5)

我自己得到了答案。所以我再一次需要非粗暴的操作,如:

  • POST / users / restore-password
  • POST / users / activate

解决方案:

function nonCrudOperation(urlSegment, requestMethod){
  return Backbone.sync.call(this, null, this, _.extend({
    url: this.url() + '/' + urlSegment,
    type: requestMethod
  }, options));
};

var UsersModel = Backbone.Model.extend({
  urlRoot: 'user',
  activate: function(options){
    return nonCrudOperation.call(this, 'activate', 'POST');
  },
  restorePassword: function(options){
    return nonCrudOperation.call(this, 'restore-password', 'POST');
  }
});

答案 1 :(得分:3)

将登录作为其端点分离出会话模型并使用它来完成登录事务可能更有意义。这些方面的东西:

var UserSessionModel = Backbone.Model.extend({
  urlRoot: 'users/login',
  defaults: {
    email: null,
    password: null
  }
});

成功登录后,您可能会为实际用户换出会话:

var session = new UserSessionModel({ username: 'foo', password: 'bar' }),
    user;

session.save({ 
  success: function (attrs) {
    user = new UserModel(attrs);
  }
});

答案 2 :(得分:0)

使用自己的方法补充内置fetchsave以及常规$.ajax调用是没有错的。例如,引入您自己的resetactivate方法是非常好的,这些方法对专用服务器URI执行常规$.post以重置密码并相应地更新用户实例。