数据与服务器

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 = ;
};

但是我在测试时却发现我的测试结果始终是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

Backbone学习记录(5)的更多相关文章

  1. Backbone学习记录(7)

    事件委托 <form> <input type="text" class="txt"> <input type="but ...

  2. Backbone学习记录(6)

    路由 backbone将路由规则和一个方法名绑定到一起,来控制单页的hash,以及单页的前进后退. var UserRouter = Backbone.Router.extend({ routes: ...

  3. Backbone学习记录(4)

    事件绑定  on()方法 调用格式:object.on(event, callback, [context])"change" — 当attributes变化时"chan ...

  4. Backbone学习记录(3)

    创建视图 同前面创建模型和集合的方式一样,Backbone.View.extend()即可创建视图 var UserView=Backbone.View.extend(); var view1=new ...

  5. Backbone学习记录(2)

    创建一个集合 1)new Backbone.Collection()方式 var user=new Backbone.Model({'name':'susan'}); var list=new Bac ...

  6. Backbone学习记录(1)

    去年买的<基于MVC的javascript Web富应用开发>,拖到现在还没看完,作者介绍了三个MVC框架,Spine ,backbone和javascriptMVC.1和2在国内的流行度 ...

  7. Backbone 学习笔记

    Backbone 是一款基于模型-视图-控制器 MVC 模式的轻量级javascript 框架 ,可以用来帮助开发人员创建单页Web应用. 借助Backbone 我们可以使用REST的方式来最小化客户 ...

  8. Quartz 学习记录1

    原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...

  9. Java 静态内部类与非静态内部类 学习记录.

    目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...

随机推荐

  1. Java 内存区域与内存溢出异常

    一.Java虚拟机内存划分 1.程序计数器 线程私有 可以看做是当前线程所执行的字节码的行号指示器.字节码解释器工作时是通过改变这个计数器的值来选取下一条需要执行的字节码指令. Java虚拟机是通过多 ...

  2. ios实现倒计时的两种方法

    方法1:使用NSTimer来实现 主要使用的是NSTimer的scheduledTimerWithTimeInterval方法来每1秒执行一次timeFireMethod函数,timeFireMeth ...

  3. Vijos P1389婚礼上的小杉

    背景 小杉的幻想来到了经典日剧<求婚大作战>的场景里……他正在婚礼上看幻灯片,一边看着可爱的新娘长泽雅美,一边想,如果能再来一次就好了(-.-干嘛幻想这么郁闷的场景……). 小杉身为新一代 ...

  4. vue文档重读有感

    vue 官方文档,每次读都有不一样的感受.项目已经做过一个了,遇到了不少问题,下面总结下这次看到的注意点: 一.指令方面 1. v-once  一次性绑定,只渲染元素和组件一次.随后的重新渲染,元素/ ...

  5. SpringBoot配置文件详解

    自定义属性与加载 com.dongk.selfproperty.title=wangdkcom.dongk.selfproperty.name=10000 然后通过@Value("${属性名 ...

  6. HDU2609 How many —— 最小表示法

    题目链接:https://vjudge.net/problem/HDU-2609 How many Time Limit: 2000/1000 MS (Java/Others)    Memory L ...

  7. 基于Python 的简单推荐系统

    def loadExData(): return[[1,1,1,0,0], [2,2,2,0,0], [1,1,1,0,0], [5,5,5,0,0], [1,1,0,2,2], [0,0,0,3,3 ...

  8. 用mkdirs创建目录

    import java.io.*; class a { public static void main(String args[]) { createDir("c:/fuck"); ...

  9. EOJ Monthly 2018.4 (E.小迷妹在哪儿(贪心&排序&背包)

    ultmaster 男神和小迷妹们玩起了捉迷藏的游戏. 小迷妹们都希望自己被 ultmaster 男神发现,因此她们都把自己位置告诉了 ultmaster 男神,因此 ultmaster 男神知道了自 ...

  10. Objective-C Runtime(一)预备知识

    很早就知道了Objective-C Runtime这个概念,「Objective-C奇技淫巧」「iOS黑魔法」各种看起来很屌的主题中总会有它的身影:但一直没有深入去学习,一来觉得目前在实际项目中还没有 ...