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的版本太高了,

  

 

  

posted @ 2014-08-25 17:12  jienyi  阅读(196)  评论(0编辑  收藏  举报