数据与服务器

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. storage engine option for directoryPerDB

    Requested option conflicts with current storage engine option for directoryPerDB; you requested true ...

  2. hdfs namenode出错

    http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_design.html 健壮性 HDFS的主要目标就是即使在出错的情况下也要保证数据存储的可靠性.常见的三种出 ...

  3. 简说 call() 、apply() 、bind()

    对于这三个方法,我想一部分人还是比较陌生的. 所以今天来个简单的介绍~ 我们可以将call()和apply()看作是某个对象的方法,通过调用方法的形式来间接调用函数.call()和apply()的第一 ...

  4. IDEA中Git的应用场景

    工作中多人使用版本控制软件协作开发,常见的应用场景归纳如下: 假设小组中有两个人,组长小张,组员小袁 场景一:小张创建项目并提交到远程Git仓库 场景二:小袁从远程git仓库上获取项目源码 场景三:小 ...

  5. oracle服务丢失的处理方法之OracleServiceORCL不存在示例

    oracle服务是oracle数据库的重要组成部分,下面就教您oracle服务丢失的处理方法,如果您之前遇到过oracle服务丢失的问题,不妨一看. 今天发现数据库服务器上的所有oracle服务都丢失 ...

  6. kentico检查当前授权用户,是否为admin角色

    https://docs.kentico.com/k11/custom-development/user-internals-and-api/checking-permissions-using-th ...

  7. iOS--控制器加载自定义view的xib

    我们在项目中,经常需要使用到自定义的view,而xib布局显得更为简洁,那么如何加载一个自定义的xib呢,网上的方法也很多很多,就是因为太多了,我经常会弄混,所以总结其中一个使用,如果以后使用到其他的 ...

  8. Java中文&编码问题小结

    转自:http://www.blogjava.net/zhugf000/archive/2005/10/09/15068.html Java字符编码转换过程说明 常见问题 JVM JVM启动后,JVM ...

  9. 计算机科学 —— 时间戳(timestamp)

    时间戳的一个重要属性即是:唯一性,以起到唯一标识的作用: 1. linux 命令行 $ date +%s 1506222745 2. Python 时间戳 内置 time 库 >> tim ...

  10. 开发微信小程序入门前

    开发微信小程序入门前 百牛信息技术bainiu.ltd整理发布于博客园 2016年09月21日晚 微信发不了微信“小程序”的内测版,一时间整个互联网都炸了锅.个大新闻.论坛都在讨论这个事情. 作为互联 ...