我有以下用户模型:
var UserModel = Backbone.Model.extend({
urlRoot: 'user',
defaults: {
fullName: null,
email: null,
password: null
}
});
现在我们可以 CRUD(注册、更新信息、删除和获取用户),但是:
- 忘记密码
- 激活账户
我将如何扩展我的 UserModel 以使其成为可能?
我有以下用户模型:
var UserModel = Backbone.Model.extend({
urlRoot: 'user',
defaults: {
fullName: null,
email: null,
password: null
}
});
现在我们可以 CRUD(注册、更新信息、删除和获取用户),但是:
我将如何扩展我的 UserModel 以使其成为可能?
我自己得到了答案。因此,我再次需要非粗略操作,例如:
解决方案:
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');
}
});
将登录作为其端点的会话模型分离出来并使用它来完成登录事务可能更有意义。这些方面的东西:
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);
}
});
制作自己的方法来补充内置方法fetch
并save
进行常规$.ajax
调用并没有错。引入您自己的方法是非常好的reset
,activate
例如,$.post
对专用服务器 URI 执行常规操作以重置密码并相应地更新用户实例。