2013-07-08 41 views
1

我有下面的代码,它使用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(); 
+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模型。

也请记住,你必须通过模型中的网址,所以你应该对它进行设置或实例化时把它作为一个参数,如:

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

真棒男人..工作得很好.... –

+0

是啊我已经声明登录视图和模型分开。我认为我必须在extend()部分内部做到这一点..谢谢无论如何..工作得很好.. :) –