javascript - backbone.js ajax 调用

标签 javascript backbone.js

我正在为我正在构建的新应用学习 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/

相关文章:

javascript - 自定义指令中的自动增量值

javascript - Javascript 中的 "for..in"产生 "undefined"值

javascript - Backbone.js 比较函数,如何实现降序?

javascript - 新的 Backbone 实例属性指向旧实例属性

javascript - 在 javascript 中转义 &lt;/script&gt; 标签

javascript - Rails 3 CSRF token 在 POST 请求之前发生更改

javascript - IE 中止 http post 请求并出现错误 0x2ee2

javascript - 自定义函数类

javascript - 使用 <button> 标签选择性提交表单不起作用

javascript - 从 Rails 实时触发主干事件