我正在为我正在构建的新应用学习 Backbone.js。
我需要执行 AJAX 调用 (REST SERVICE
) 进行身份验证。
这个调用的正确位置在哪里?在模型、 View 或其他地方?特别与 Backbone.js MVC 模型相关。
<html>
<head>
<script src="lib/jquery-1.6.1.min.js"></script>
<script src="lib/json2.js"></script>
<script src="lib/underscore-min.js"></script>
<script src="lib/backbone-min.js"></script>
<script language="javascript">
$(function(){
var LoginView = Backbone.View.extend({
el: $("#login-form"),
events: {
"click #login": "login"
},
login: function(){
alert("Hello");
}
});
window.LoginView = new LoginView();
});
</script>
</head>
<body>
<form action="/login" id="login-form">
Username: <input type="text" id="username"><br>
Password: <input type="password" id="password"><br>
<button id="login">Login</button>
</form>
</body>
</html>
最佳答案
创建一个身份验证模型,存储发布状态(用户名、密码、记住我)以及响应状态(登录失败、登录已接受)...
App.Model.authentication= Backbone.Model.extend({
defaults: {
Username: "",
Password: "",
RememberMe: false,
LoginFailed: false,
LoginAccepted: false
},
url:"api/authentication"
});
更新 View 以使用模型:
$(function () {
var LoginView = Backbone.View.extend({
model: new App.Model.authentication(),
el: $("#login-form"),
events: {
"click #login": "login"
},
login: function () {
this.model.save({username: this.$el.find("#username"),
password: this.$el.find("#password")}, {
success: function () {
/* update the view now */
},
error: function () {
/* handle the error code here */
}
});
}
});
}
);
调用 Model.Save() 将向服务器发出一个 post 请求,尽管在这个实例中您实际上并没有在服务器上保存任何东西,而是检查凭据并发回一个具有相同模型的对象,但使用适当设置“LoginAccepted”字段。
不要实现自定义 JQuery AJAX 帖子 - 这不符合 Backbone 精神,它通过 REST 接口(interface)在后台为您处理所有事情。
有关 REST 接口(interface)和主干网使用的各种 REST 操作和 URL 的更多详细信息:http://codebyexample.info/2012/04/30/backbone-in-baby-steps-part-3/
关于 AJAX 与 model.save() 争论的另一件事。如果您的应用程序是像 IRC 这样的无状态聊天室 - 它向聊天室中的其他用户发送消息但不集中保存消息......您会丢弃所有主干的 REST 功能并使用自定义 AJAX 调用重新实现它们吗因为你实际上并不是在“储蓄”,你实际上只是在“发送”。仅仅因为语义,这将花费您大量的工作来重新实现已经存在的功能。始终将 model.save() 读作 model.post() - 它不仅用于保存 - 它用于发送。
关于javascript - backbone.js ajax 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11331604/