Backbone

Backbone: 依赖underscore.js

Model:
 1. Backbone.Model.extend();创建一个Model
 2. var User = Backbone.Model.extend({
         initialize: function(name){
            this.set({name: name});
         }
     });
    initialize()可以接受任意实力参数: var user = new User('janey'); janey即name; user.get('name')= 'janey'
 3. var User = Backbone.Model.extend({
         validate: function(atts){
             //........
         }
    });
    validate(): 模型和属性合法,不返回任何东西;不合法,返回错误信息;校验失败,set()和save()方法不再继续,出发error事件
 4. var User = Backbone.Model.extend({
         default: {
             //默认属性
         }
     });
    创建实例时,任何没有指定的属性都会被设置成默认属性.
    在创建View是当作参数传给view: new View({model: modelName});
    在template中<%- modelKeyName %>或<%= modelKeyName == "xxxx" ? "yyy" : "zzz" %>与model的属性绑定
Collection:
 1. var Users = Backbone.Collection.extend({
         model: User
     });
    (1). var users = new Users([{name: 'ddd'}, {name: 'aaa'}]);//初始化时传递一个模型数组
    (2). var users = new Users; 
           users.add({name: 'ddd'});//添加单独模型
           users.add([{name: 'ddd'}, {name: 'aaa'}]);//添加模型组成数组
    (3). users.bind('add', function(user){
               //......
           });//在为集合添加一个模型时触发
          users.bind('remove', function(){
               //......
          });//从集合删除一个模型是触发
          usres.remove(users.models[0]);//删除一个模型
 2. 取指定模型:
    (1). var user = users.get('model-id');//有模型ID
    (2). var user = users.getByCid('cid');//创建一个新模型是由Backbone自动创建的客户ID
 3. 当Collection中的Model改变,触发change事件
     eg: var user = new User({name: 'aaa'});
     var users = new Backbone.Collection;
     users.bind('change', function(){
         //......
      });
     user.add(user);
    user.set({name: 'bbb'});//触发change事件
 4. 集合排序
    var Users = Backbone.Collection.extend({
    comparator: function(user){
            return user.get('name');//返回值表示希望集合内部元素按何种规则排序;
        }
   });
   //conparator将在后台自动完成排序,如要强制执行重新排序,用sort();
View:
 1. var UserView = Backbone.View.extend({
         tagName: 'span',
        className: 'users',
         initialize: function(){//......},
        render: function(){//......}
     });
    每个View的实例都知道当前的DOM元素,即this.el; el是从View的tagName, className,id等出行中创建出来的元素,如果没有指定,el为div
 2. var UserView = Backbone.View.extend({
         //将View绑定到页面已经存在的元素上
         el: '#elmentId',
         //渲染视图
         template: _.template($('#template').html()),
         render: function(){
         this.$el.html(this.template(//model data.....));
         return this;
     },
   //事件
  evetns: {
     'click #id': 'handler',
         //......
  },
  handler: function(){
      //......
  }
});
Router:
 1. var router = Backbone.Router.extend({
     routers: {
        ' ': 'index',
        'help': 'help',                     //#help: (localhost:8080/project_name/#help)
        'search/:query': 'search',          //#search/kiwis: (参数以:开始)
        'search/:query/p:page': 'search',   //#search/kiwis/p7: ()
        'file/*path': 'file',               //#file/any/path.txt:(*为通配符,匹配所有,位于routes哈希对象的尾部)
    },
  });
 2. *如果想要应用程序既适用Ajax Crawling规范,也能被搜索引擎索引,所有router前缀为 "!/" ,
     routers: {
        '!/page/:title': page,
     },
     且根据规范,服务端要做一些相应的修改
 3. Backbone.history.start();  //开启Backbone的history支持监听浏览器onhashchange事件
Model与服务器的同步:
 1. 默认保存Model,Backbone就会用Ajax请求通知服务器,可以使用jquery, Zepto.js等类库
 2. create, update, delete一个Model,Backbone通过调用Backbone.sync()实现,Backbone发起REST形式的JSON请求到服务器,成功:更新客户端Model。
 3. 使用同步特性,Model要定义一个url,且服务端处理请求符合REST形式:
    var User = Backbone.Model.extend({
        url: '/users',
    });
    //url属性可以是字符串,也可以是返回字符串的函数,路径可以相对,可以绝对,但要返回模型端点
 4. Backbone CURD:
    create---->POST   //collection
    read------>GET    //collection/[id]
    update---->PUT    //collection/id
    delete---->DELETE //collection/id
    Model保存: user.save({key: value});
    fetch(): GET请求刷新model,如果远程model与当前model数据不一样,触发change事件
填充Collection:
 1. Collection:用来请求远程的model并保存在本地,须给collection指定url属性来设置它的端点,如果没有,Backbone使用与之关联的model的url:
    var Followers = Backbone.Collection.extend({
        model: User,
        url: '/followers'
    });
    fetch():发送GET请求,获取远程model,当数据返回后,collection刷新,触发refresh事件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值