gpt4 book ai didi

javascript - Backbone 中的类方法

转载 作者:行者123 更新时间:2023-11-30 17:51:58 24 4
gpt4 key购买 nike

我正在尝试使用 Backbone 通过 Devise(Rails 的身份验证 gem)实现身份验证。用户可以通过将 DELETE 请求发送到 /users/sign_out/ 来退出 Backbone,所以我无法使用此链接,因为如果我单击它,它是一个 GET 请求

<li><a href="/users/sign_out" class="thumbnail plain">sign out</a></li>

然后我在用户模型上创建了一个注销方法,但要触发它我必须有一个用户模型的实例(很明显)。我在路由器中创建了一个注销方法,该方法通过导航到 logout 路由来触发,但是由于我只能使用它的实例在用户模型上调用 logout ,我在注销方法中创建一个新模型只是为了调用注销。

    "logout": "logout"

},

logout: function(){
var foo = new app.Models.User
foo.logout();

}

这显然是个坏主意,但我不知道还能做什么。你能推荐我应该做什么吗?有没有办法让注销成为一个类方法,这样我就不必为了注销或其他东西而实例化一个新模型?

更新

这是 User 模型中的 createUser 方法,它发送注册数据来设计。在成功回调中,它将 session 分配给变量 window.app.current_user = userSession;。我在用户模型上也有一个注销方法,我尝试像这样从路由器调用

退出路由器

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);
}
});

},

最佳答案

我有点不明白为什么在尚未创建用户模型时要触发注销功能。您能否解释一下您在路由器中使用此注销功能的原因?

就我个人而言,我会有一个 session 模型来监听链接的点击事件。然后这将调用注销方法,该方法将发出删除请求。

更新

这是一个快速的 JsFiddle,它显示了创建模型并将其附加到全局变量: http://jsfiddle.net/Francium123/eBG3E/2/

    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());

请注意,这只是一个示例,我怀疑您是否愿意将密码存储在模型中!

此外,您应该能够使用 Backbone Models fetch(GET)、save(POST/PUT)、destroy(DELETE) 方法,而不是直接在模型中编写 ajax 请求。如果需要,您可以覆盖模型同步方法。

关于javascript - Backbone 中的类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18834720/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com