前一段时间研究一下backbone.js 框架,之所以研究backbone 1.我们小组用的mvc 还是有点粗糙,写法只是形式上的。想找一个mvc 的框架 2.很多网友在用或提到过backbone.js。研究一段时间,发现资料很少,英文文档看起来费劲,搜索很多时候搜不到,搜到一些demo质量很低下,js大牛司徒正美居然说他很难维护,这些都深深打击了我脆弱和善良的小心灵。这几天又深深反省一下,既然这么人在用,就一定有他的优点!只有亲自研究过,才能知道优劣 。
我们这边的数据主要是ajax,backbone怎么发ajax 成为了重点。backbone.sync 这个名字很坑爹,sync 还以为是同步,其实发的都是异步,用的是$.ajax. backbone 框架都是用sync来发ajax。那么model怎么发ajax呢?
一开始,网上搜了一下,乱七八糟的东西,没找到答案,后来和周大师讨论一下,说重写!重写我感觉很别扭,那我用框架意义不怎么大了。幸好,backbone的代码不是很多,自己研究了一下backbone.sync 这个函数。自己写了demo抓包调试,下面说一下典型的 model save 提交到服务器 ! 其他的比较简单
1.首先一定设置
Backbone.emulateJSON = true
这个设置使 contentType: "application/x-www-form-urlencoded",不设置会为 contentType: "application/json
2.model 提交数据要用到可以用其save()方法,看一下save 方法
save: function(key, val, options) { var attrs, success, method, xhr, attributes = this.attributes; // Handle both `"key", value` and `{key: value}` -style arguments. if (key == null || typeof key === 'object') { attrs = key; options = val; } else { (attrs = {})[key] = val; } /** *以下省略 */ },
三个参数,参数key 要设置为 null, 如果不设置为null,contentType:"application/json 这种方式,后端php 通过$_POST 接收不到任何参数。可以像下面那样设置
this.model.save(null,{data:{'name':'liuzng','test':'cao'}, beforeSend:function(){alert(2)}, success:function(model, response, options) {console.log(response)} });
这样就可以提交 第二参数可以写ajax选项。可以像ajax一样提交
ps : backbone.sync 这个函数只是稍微处理一些东西,本质仍是$.ajax!你也可以看看源码
正在学习,欢迎拍砖!