0

我有以下用户模型:

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

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

  • 忘记密码
  • 激活账户

我将如何扩展我的 UserModel 以使其成为可能?

4

3 回答 3

5

我自己得到了答案。因此,我再次需要非粗略操作,例如:

  • POST /users/restore-password
  • 发布/用户/激活

解决方案:

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');
  }
});
于 2012-09-26T21:23:51.543 回答
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);
  }
});
于 2012-09-26T20:42:38.240 回答
0

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

于 2012-09-26T21:36:40.907 回答