• 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

  • 相关阅读:
    浅谈ASP.NET内部机制(四)
    用正则表达式看.NET编程正则核心对象详解(三 )
    【讨论】对技术的掌握到底应该又多深?
    掌握XML系列(三)创建格式良好的饿XML文档 续编
    浅谈ASP.NET的内部机制(一)
    浅谈ASP.NET内部机制(三)
    浅谈ASP.NET的内部机制(二)
    小工具大智慧
    老生常谈:抽象工厂模式
    又说:程序员的成长过程
  • 原文地址:https://www.cnblogs.com/qianlegeqian/p/3944050.html
Copyright © 2020-2023  润新知