zoukankan      html  css  js  c++  java
  • Backbone学习记录(5)

    数据与服务器

    var User=Backbone.Model.extend({
        defaults:{
            name:'susan',
            age:18
        },
        url:'/user'//数据提交的路径
    });
    
    var user=new User({name:'lily'});
    user.save();//将数据保存到服务器


    从这里可以看到,user.save()执行是将数据提交到了user.url。

    在妙味课堂backbone初探这节的视频中,它重写了Backbone.sync方法以测试save的第一个参数传入的是create还是update:

    Backbone.sync = function(method, model) {
          console.log(method + ": " + JSON.stringify(model));
          model.id = 1;
    };

    但是我在测试时却发现我的测试结果始终是create。后来发现问题出在backbone的版本上。
    我的测试版本是1.1.2,而妙味的测试版本是1.1.0。

    Backbone.sync=function(method,model){
        model.id=1;//wrong
        console.log(method,JSON.stringify(model));
    }
    
    var User=Backbone.Model.extend({
        defaults:{
            name:'susan',
            age:18
        },
        url:'user.json'
    });
    
    var user=new User({name:'lily'});
    user.save({name:'lucy'});
    //1.1.2  
    //create {"name":"lily","age":18}
    //create {"name":"lucy","age":18} 
    Backbone.sync=function(method,model){
        model.id=1;//right
        console.log(method,JSON.stringify(model));
    }
    
    var User=Backbone.Model.extend({
        defaults:{
            name:'susan',
            age:18
        },
        url:'user.json'
    });
    
    var user=new User({name:'lily'});
    user.save();
    user.save({name:'lucy'});
    //1.1.0
    
    //create {"name":"lily","age":18} backbone_test.html:14
    //update {"name":"lucy","age":18} 

    跟踪1.1.2的源码:

    可以看到,在1.1.2中,是通过get()方式去获取id的值。
    而我调试发现。mode.id方式添加的属性是加在这里:在1.1.2的版本中,通过这种方式添加的属性不能用get获取到。


    所以,解决办法也想到了,将model.id=1改为model.set("id",1);

    Backbone.sync=function(method,model){
        model.set('id',1);//right
        console.log(method,JSON.stringify(model));
    }
    
    var User=Backbone.Model.extend({
        defaults:{
            name:'susan',
            age:18
        },
        url:'user.json'
    });
    
    var user=new User({name:'lily'});
    user.save();
    user.save({name:'lucy'});
    
    //1.1.2
    
    //create {"name":"lily","age":18,"id":1} 
    //update {"name":"lucy","age":18,"id":1} 


    fetch()方法 读取数据。

    Model和Collection对象都有fetch()方法。调用fetch方法时,fetch内部调用Backbone.sync()方法,传入的method为read。

    Backbone.sync=function(method,model){
        console.log(method,JSON.stringify(model));
    }
    
    var User=Backbone.Model.extend({
        initialize:function(){
            this.on('reset',function(){
                console.log('reset');
            })
        },
        url:'user.json'
    });
    
    var user=new User();
    user.fetch();
    
    // read  {}
    Backbone.sync=function(method,model){
        console.log(method,JSON.stringify(model));
    }
    
    var User=Backbone.Collection.extend({
        initialize:function(){
            this.on('reset',function(){
                console.log('reset');
            })
        },
        url:'user.json'
    });
    
    var user=new User();
    user.fetch();
    
    // read []

     也可以给fetch方法传递参数,设置url,成功和失败的回调:

    var User=Backbone.Model.extend({
        initialize:function(){
            this.on('reset',function(){
                console.log('reset');
            })
        }
    });
    var user=new User();
    user.fetch({
        url:'user.json',
        success:function(model,response){//response是服务器返回的数据
            console.log(JSON.stringify(response));//{"name":"susan","age":18} 
        },
        error:function(){
            console.log("error");
        }
    });

    关于Backbone.sync这个方法,它有一个CRUD的参数(create read update delete)所对应的请求为 POST,GET,PUT,DELETE

  • 相关阅读:
    shell编程基础
    centos7怎么查看、打开和关闭防火墙
    Linux下查看根目录各文件内存占用情况
    两台Linux系统之间传输文件的几种方法
    rabbitmq3.8版本默认用户guest访问报错User can only log in via localhost解决方案
    docker 部署java web应用_使用Docker部署JavaWeb项目
    ubuntu安装curl命令
    docker重新进入容器时“/etc/profile”中环境变量失效问题的解决
    在docker容器中安装软件,并重新生成镜像
    CentOS7安装RabbitMQ
  • 原文地址:https://www.cnblogs.com/qianlegeqian/p/3944050.html
Copyright © 2011-2022 走看看