数据通过骨干模型传递

时间:2013-07-08 09:16:24

标签: backbone.js backbone-model

我有以下代码,使用jquery-ajax调用编写得很好。但是我无法弄清楚如何通过模型传递值。从一些研究中我已经做了一些事情你可以在下面看到它(就在ajax调用之上)。

我想用login.save()替换$ .ajax()并通过save()传递值。请让我知道我所做的是正确的,或者是否有更好的方法。我可以在模型中编写成功和失败回调(正如我所做的那样)吗?

   //Login Page View
   var LoginView = Backbone.View.extend({
   el:"#main-content",
   initialize:function(){
          console.info("Login View Initialized");
          var template = _.template($('#login-template').html());
          this.$el.html(template);
   },
   render:function(){
          console.log("Login Render Function Called");
   },
   events:{
          'click #login':'login'
   },
   login:function(ev){      
          var loginDetails = $(ev.currentTarget).serializeObject();

          console.log(loginDetails);
          username = $("#username").val();  
          password = $("#password").val();
          ky         = 'MTWEB';

          if(username==""){
                 $('#username').css("border","1px solid #ff0000");
          }else if(password==""){
                 $('#password').css("border","1px solid #ff0000");
          }else{

                 var data = '{"un": "'+username+'","pd": "'+password+'","ky": "'+ky+'"}';
                 console.log(data);

                 //Using Backbone Model (I want to do it this way)
                 login.save({un : username,pd : password, ky : ky}, {
                                      success :function(){
                                      console.log("success");
                              },
                              error: function(){
                                      console.log("error");
                              }
                 });
                 //Using Backbone Model

          //jQuery Ajax Call (What i have done which works well)
          $.ajax({
                        url:basePath+'profile/Login',
                        data:data,
                        dataType:'json',
                        type:'POST',
                        success:function(result){
                                      $("#login_message #msg").html(result.me);
                                      $("#login_message").css('display','block');
                                      $("#login_message").removeClass('alert-success alert-error alert-warning');
                                      if(result.ss==1){
                                        $("#login_message").addClass('alert-success');
                                        console.log(result);
                                        return false;
                                      }else{
                                        $("#login_message").addClass('alert-error');
                                        console.info("Failed to Log In.");
                                      }
                                      return false;
                        },
                        error:function(result){
                                      console.log("fail :"+result);
                                      return false;
                        }
        });
        //jQuery Ajax Call

    }
    return false;
   }

   });

   var loginview = new LoginView();

1 个答案:

答案 0 :(得分:1)

您的视图看起来没有型号

至少你需要声明一个模型并在创建它时将它传递给视图。例如

var LoginModel = Backbone.Model.extend();

var loginview = new LoginView({ model: new LoginModel() });

然后在您的视图中,您需要在模型上调用保存功能,如:

this.model.save({un : username,pd : password, ky : ky}, {
                                  success :function(){
                                  console.log("success");
                          },
                          error: function(){
                                  console.log("error");
                          }
             }); 

目前尚不清楚您的登录变量是什么,但它看起来不像Backbone模型。

另外请记住,您必须将模型传递给URL,因此您可能应该在实例化时将其设置或作为参数传递,如:

new LoginModel({}, { url: "/someurl"});