数据与服务器

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. 新拿到的app跑的时候出现问题

    连接器链接失败,是因为对应类build后的中间产物.o文件没有生成,对应架构下,用模拟器跑的,很可能是因为无法编译产出x86,或i386架构的中间产物,所以linker链接转换机器码时候找不到对应的中 ...

  2. Unity3D集成腾讯语音GVoice SDK

    友情提示:最近发现腾讯GVoice有另一个官网,叫做腾讯游戏服务,经过对比发现这个网站才是最新的,下面我介绍的那个估计是已经废弃的,但不知道为啥老的网站没有直接链接到新网址而是仍然保留了.不过新官网的 ...

  3. antV G6流程图在Vue中的使用

    最近我司项目中需要加入流程图制作功能,于是乎百度各种找可视化绘制拓扑图的轮子,大部分都是国外的,看文档太吃力,不过好在最终让我发现了AntV G6流程图图表库,最新版为2.0,不过编辑器在2.0版本还 ...

  4. DEDECMS织梦自定义表单中必填项、电话邮箱过滤以及验证码规则

    织梦自定义表单必填项规则--->(wwwshu-acca.com网站表单) 1. 在plus/diy.php 的第 40行下加如下代码: 1 2 3 4 5 6 7 8 9 10 11 12 1 ...

  5. hdu 1711 Number Sequence 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 题目意思:给出一条有n个数的序列a[1],a[2],......,a[n],和一条有m 个数的序 ...

  6. poj 2185 Milking Grid(next数组求最小循环节)

    题意:求最小的循环矩形 思路:分别求出行.列的最小循环节,乘积即可. #include<iostream> #include<stdio.h> #include<stri ...

  7. fuse的mount机制-流程及参数

    在bbfs中,传递的参数有两个目录,fuse将一个目录挂载在另一个目录下. 在ssfs中,传递的参数只有一个目录(传递两个目录fuse会出错). 问题:那么fuse的mount机制到底需要几个目录参数 ...

  8. DP专辑之最长公共子序列及其变形

    vijos1111(裸的最长公共子序列) 链接:www.vijos.org/p/1111 题解:好久没有写最长公共子序列了,这题就当是复习了.求出最长公共子序列,然后用两个单词的总长度减去最长公共子序 ...

  9. 任务13:在Core Mvc中使用Options

    13 新建Controllers文件夹,在里面添加HomeController控制器 新建Views文件夹,再新建Home文件夹.再新建Index.cshtml的视图页面 注释上节课的代码,否则我们的 ...

  10. linux C之access函数(转载)

    转自:http://blog.sina.com.cn/s/blog_6a1837e90100uh5d.html access():判断是否具有存取文件的权限 相关函数    stat,open,chm ...