数据与服务器

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. CentOS笔记-vim

    详细的参考http://www.runoob.com/linux/linux-vim.html i插入 I 行首插入 A 行尾插入 fn + ←,行首 fn + →,行尾 fn + ↑,向上翻页 fn ...

  2. Designing a RESTful API with Python and Flask 201

    rest服务器的搭建 - CSDN博客 http://blog.csdn.net/zhanghaotian2011/article/details/8760794 REST的架构设计 REST(Rep ...

  3. [原创]java获取word文档的条目化内容

    在开发Web办公系统或文档系统时,PageOffice组件是众所周知的在线处理微软word/ppt/excel文档的强大工具,它对WORD文档的各种处理在API层面进行了封装,屏蔽了Office VB ...

  4. asp.net微软图表控件MsChart

    前段时间,开发项目时,由于需要,需要将一些数据统计,并以图表形式显示.由于是asp.net,所以就找到了MsChart图表控件,还是挺方便实用的,分享一下. MsChart控件的主要组成如图所示 工具 ...

  5. 百度地图API应用之获取用户的具体位置

    功能的大概:用户通过点击地图上面的位置,在地图上面进行描点,然后再把获取的到的地理位置保存到地图上面的地址栏目中. 主要是百度地图API的使用 .代码如下: var map = new BMap.Ma ...

  6. 百度地图API--信息窗口

    信息窗口 -----纯文本信息窗口 为了更方便的提示用户,在地图的指定的地方添加文本信息的窗口,给用户直观展示信息,下面是如何添加一个纯文本的信息窗口. 下面是添加一个文本窗口: /* * 添加纯文本 ...

  7. I.MX6 boot from Micro SD

    /***************************************************************************** * I.MX6 boot from Mic ...

  8. spring配置mongodb连接副本集多个节点

    mongodb版本3.4.x 1.配置副本集 先配置副本集,可参考我之前写的文章:http://blog.csdn.net/fuck487/article/details/78287362 注意:必须 ...

  9. JAVA 集合JGL

    集合 Java提供了四种类型的“集合类”:Vector(矢量).BitSet(位集).Stack(堆栈)以及Hashtable(散列表).与拥有集合功能的其他语言相比,尽管这儿的数量显得相当少,但仍然 ...

  10. 实现文字下划线 ---模拟text-decoration

    css 的text-decoration可以实现文字下方的下划线,但是距离文字比较近,不是很好看,我们可以使用border-bottom来模拟这个效果 (inline元素虽然不可以设置margin-t ...