BackbOne移动端框架学习(3):backbone中的 collection
声明:本人摘抄自 the_fire ,多谢这位大神提供的学习资料。
1,backbone.collection 定义
collection是model对象的一个有序集合。
// console.log("222"); Book = Backbone.Model.extend({ defaults:{ title:"JavaScript高级程序设计" }, initialize:function(){ } }); BookShelf = Backbone.Collection.extend({ model:Book }); var book1 = new Book({title:"book1"}); var book2 = new Book({title:"book2"}); var bookShelf = new BookShelf([book1,book2]); //bookShelf.add(book2) //bookShelf.remove(book2); bookShelf.each(function(book){ console.log(book.get("title")); //book1,book2 })
集合是模型的有序组合,我们可以在集合上绑定"change" 事件,从而当 集合中的模型(model) 发生变化的时候获得通知。
2,使用fetch从服务器上获取数据
首先要在 Collection的实例上定义 url
// 登录请求 Login = Backbone.Model.extend({ initialize:function(){ }, defaults:{ member_mobile : "", member_passward:"" } }); //model集合 LoginCollection = Backbone.Collection.extend({ model:Login }); var loginC = new LoginCollection(); loginC.fetch({ url : 'http://xxx.php?m=home&c=member&a=login&member_mobile=15910216409&member_passward=123456', success:function(collection,response){ //console.log(collection); console.log(response); } })
至于,为什么要在collection中也可以请求数据,我也不清楚,如果有哪位大神知道,请您务必留言为我解惑,在此感谢!
collection.fetch([options])方法支持success()和error()回调函数,回调函数接受(collection,response)作为参数。
我们想要的数据结果,可以从collection获取到,当然也可以从response来获取。
3,reset方法
这个方法要和上面的代码(fetch())进行配合使用。collection在fetch到数据后,会调用 reset(),所以,需要在collection中
定义reset()或则bind reset()。不过,要注意的是,为collection绑定reset()需要在 fetch()方法之前定义。
var loginC = new LoginCollection(); loginC.bind('reset',ShowAllInfo); loginC.fetch({ url : 'http://t2.wxwork.cn/index.php?m=home&c=member&a=login&member_mobile=15910216409&member_passward=123456', success:function(collection,response){ collection.each(function(userInfo){ console.log(userInfo.get("member_id")); }) //console.log(response); } }); var ShowAllInfo = function(){ loginC.each(function(userInfo){ //基于underscore这个js库,还可以使用each来获取collection中的数据库 console.log(userInfo.member_id); }) }
不知道为什么,backbone没有调用 reset 这个操作的方法。 估计因为是 我现在的zepto的版本太高了,