Backbone

Backbone 是一个 JavaScript 框架,可用于创建模型-视图-控制器 (model-view-controller, MVC) 类应用程序和单页界面

事件管理

Backbone.Events 通过继承Events的方法来实现事件的管理 它是Backbone的核心组成的部分

基本事件方法

绑定on方法

  1. 使用on方法监听默认事件
  2. 使用on方法监听属性事件
  3. 使用on方法获取属性修改前的值
  4. 使用on方法绑定多个事件

绑定once方法

once()执行一次
trigger 触发事件
off()移除事件

新增事件方法

监听事件listenTo
监听一次listenToOnce()
停止监听stopListening

特殊事件的使用

特殊事件all的使用
事件与View Model和Collection的关系

数据模型

Model.extend()可以创建数据模型

1.实例化过程中自动执行initializa函数

var Student=Backbone.Model.extend({
    initialize:function(){
        intnum++;
        console.log("您已经创建了"+intnum+"个对象");
    }
});
var intnum=0;
var stuA=new Student();//实例化过程中自动执行initialize函数
var stuB=new Student();
//您已经创建了2个对象

2.对象模型赋值方法 通过defaults设置默认值 实例化的对象 可以通过obj.set()设置对象属性值

3.可以通过obj.get() obj.escape()获取属性值
4.监听属性值的变化
5.自定义模型中的方法

   var Student=Backbone.Model.extend({
    initialize:function(){
         this.on("change:name",function(model,value){
             // var oldname=this.previous("name");
             var oldname=model.previous("name");
             // var newname1=this.get("name");
                 var newname1=value;
             console.log("旧值是"+oldname+",新值是"+newname1);
         })
    },
    defaults:{
        name:"zhangsan",
        age:"13"
    },
    PrintLog:function(){
        console.log(this.get("name")+this.get("age"));
    }
});
var stu=new Student();
stu.set({
    name:"lisi",
    age:"14"
});
stu.PrintLog();

模型对象操作

  1. 读取修改数据
  2. 验证 关闭验证
    在使用set()设置或修改属性 必须将validate的属性值设置为true 来通知backbone框架开启验证
    调用validate()方法 按照里边的规则对相应数据进行验证(有一处数据不符合规则即为验证失败,设置也会失败),验证失败,触发invalid方法,返回失败的原因显示在浏览器。
    var Teacher=Backbone.Model.extend({
     initialize:function(){
          this.on("invalid",function(model,error){
              console.log(error);
          });
     },
     validate:function(arr){
         if(!_.isString(arr.name)){
             return '姓名不是字符串';
         }
     },
     defaults:{
        "name":"sunbaixin",
        "age":"34",
        "score":"89"
     }
 });
 var tea=new Teacher();
 tea.set({
     name:789,
     age:90
 },{validate:"true"});
  console.log(tea.toJSON());
输出结果:  姓名不是字符串
  Object {name: "sunbaixin", age: "34", score: "89"}

3 更新数据回滚 silent:true
4 删除数据 obj.unset(属性名) obj.clear()没有参数 全部清除

对象属性操作

1 调用attributes对象获取所有的属性值

2 调用previous()和previousAttributes()方法 返回对象修改前上一个状态的属性值

 var StudentA=Backbone.Model.extend({
     initialize:function(){   
     },
     defaults:{
         name:"zhangsan",
         age:"13"
     }
 });
var stuA=new StudentA();
 stuA.set({
     name:"lisi",
     age:"14"
 });
 var arr=stuA.attributes;
 for(var i in arr){
     console.log(i+":"+arr[i]);
 }//name:lisi age:14
 console.log(stuA.previous("name"));//zhangsan
 console.log(stuA.previousAttributes());//Object {name: "zhangsan", age: "13"}

同步数据到服务器

在Backbone中 客户端静态页和服务器上的数据可以通过save fetch destroy等方法对服务器上的数据进行保存 获取删除等操作

模型集合

自定义模型集合

 var Student=Backbone.Model.extend({
    defaults:{
        name:"sbx",
        code:"34"
    }
});
var Stus=Backbone.Collection.extend({
    model:Student,
    good:function(){
        return this.filter(function(stu){ return stu.get("code")>78});
    }
})
var stulist=[{
    name:"lidong1",
    code:89
},{
    name:"lidong2",
    code:78
},{
    name:"lidong3",
    code:79
}];
var stu=new Stus(stulist);
var stug=stu.good();
 for(var i=0;i<stug.length;i++){
    console.log(stug[i].toJSON());
}

操作集合中模型对象

  1. 添加 add unshift push
  2. 删除 pop shift remove
  3. 排序 sort
  4. 查找

    get(id)
    通过指定id获取集合中某一个集合对象

    at(index) 通过指定索引号 获取集合中某一个集合对象

    findWhere(attr)查找匹配的属性名称和属性值的第一个集合对象

    where(attr,first)

    first为true 查找匹配的属性名称和属性值的第一个集合对象

    first为false 查找匹配的属性名称和属性值的所有集合对象

    var Student=Backbone.Model.extend({
        defaults:{
            name:"sbx",
            code:"34"
        },
        idAttribute:"code"
     };
     var Stus=Backbone.Collection.extend({
        model:Student
    
     })
    var stulist=[{
        name:"lidong1",
        code:89
    },{
        name:"lidong3",
        code:78
    },{
        name:"lidong3",
        code:79
    },{
        name:"lidong4",
        code:79
    }];
    var newdata=[{
        name:"lidong5",
        code:89
    },{
        name:"lidong6",
        code:78
    },{
        name:"lidong7",
        code:77
    }];
       var stu=new Stus(stulist);
        console.log(stu.get(79).toJSON());
          console.log(stu.at(0).toJSON());
          var find_model1=stu.findWhere({
              code:79
          });
           console.log(find_model1.toJSON());
          var find_model2=stu.where({
              name:"lidong3"
          },false);
          for(var i=0;i<find_model2.length;i++){
              console.log(find_model2[i].toJSON());
          }
          // console.log(stu.shift());
     // console.log(stu.remove(stu.models[0]))
      // console.log(stu.pop());
       // stu.push(newdata[0])
    
     for(var i=0;i<stu.models.length;i++){
        console.log(stu.models[i].toJSON());
    }
    
sunbaixin wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!