backbone model模型

什么是模型

Backbone的模型包含应用程序的数据以及数据相关的逻辑

初始化

创建一个新模型的时候,initialize()方法会被调用

Person = Backbone.Model.extend({
        initialize: function(){
            alert("Welcome to this world");
        }
    });
    
    var person = new Person;

默认值

使用defaults属性来设置默认值

Person = Backbone.Model.extend({
        defaults: {
            name: 'Fetus',
            age: 0,
            child: ''
        },
        initialize: function(){
            alert("Welcome to this world");
        }
    });
    
    var person = new Person({ name: "Thomas", age: 67, child: 'Ryan'});
    
    var age = person.get("age"); // 67
    var name = person.get("name"); // "Thomas"
    var child = person.get("child"); // 'Ryan'

赋值与取值

model.get()
Person = Backbone.Model.extend({
        initialize: function(){
            alert("Welcome to this world");
        }
    });
    
    var person = new Person({ name: "Thomas", age: 67, child: 'Ryan'});
    
    var age = person.get("age"); // 67
    var name = person.get("name"); // "Thomas"
    var child = person.get("child"); // 'Ryan'

model.set()

Person = Backbone.Model.extend({
        initialize: function(){
            alert("Welcome to this world");
        }
    });
    var person = new Person();
    person.set({ name: "Thomas", age: 67});

通过model中的方法修改model值

Person = Backbone.Model.extend({
        defaults: {
            name: 'Fetus',
            age: 0,
            child: ''
        },
        initialize: function(){
            alert("Welcome to this world");
        },
        adopt: function( newChildsName ){
            this.set({ child: newChildsName });
        }
    });
    
    var person = new Person({ name: "Thomas", age: 67, child: 'Ryan'});
    person.adopt('John Resig');
    var child = person.get("child"); // 'John Resig'

监听模型变化

Person = Backbone.Model.extend({
        defaults: {
            name: 'Fetus',
            age: 0
        },
        initialize: function(){
            this.on("change:name", function(model){
                var name = model.get("name"); // 'Stewie Griffin'
                alert("Changed my name to " + name );
            });
        }
    });
    
    var person = new Person({ name: "Thomas", age: 67});
    person.set({name: 'Stewie Griffin'}); // This triggers a change and will alert()

与服务器交互

假设我们有一个表名为users的数据表。字段为id,name,email 服务器使用restful风格的url与我们交互

var UserModel = Backbone.Model.extend({
        urlRoot: '/user',
        defaults: {
            name: '',
            email: ''
        }
    });

通过post请求保存数据

var UserModel = Backbone.Model.extend({
        urlRoot: '/user',
        defaults: {
            name: '',
            email: ''
        }
    });
    var user = new UserModel ();
    var userDetails = { name: 'Thomas',email: 'thomasalwyndavis@gmail.com'};
    //讲发送一个POST请求 IP/user 的地址  发送数据为{name:'Thomas', email: 'thomasalwyndavis@gmail.com'}
    user.save(userDetails, {
        success: function (user) {
            alert(user.toJSON());
        }
    })
-----------------------------------------------------------
 服务器端接收数据  python:
def  post(self,request):
 req=simplejson.loads(request.raw_post_data)
 name=req[name]
 email=req[email]
 User(name=name,email=email).save()
 return HttpResponse(simplejson.dumps({'success':True}), mimetype = 'application/json')

get请求获取model值

var user = new UserModel ({id: 1});    

// 通过 GET /user/1请求获取数据    
// 服务器会从数据库中返回 id, name and email     
user.fetch({        
   success: function (user) {            
      alert(user.toJSON());        
}   
 })

put 更新,model

删除model  user.destory()

返回model的所有属性值

var person = new Person({ name: "Thomas", age: 67});   
 var attributes = person.toJSON(); // object{ name: "Thomas", age: 67}    
/* 返回当前属性的副本 */    
var attributes = person.attributes;// object{ name: "Thomas", age: 67}

验证 通过save()方法或者{validate:true}参数的set()方法持久化模型时,验证就会触发

Person = Backbone.Model.extend({       
  validate: function( attributes ){           
    if( attributes.age < 0 && attributes.name != "Dr Manhatten" ){                
      return "You can't be negative years old";           
    }        
  },        
  initialize: function(){           
    this.on("invalid", function(model, error){                
      alert( error );            
    });        
  }    
});        
var person = new Person;    
person.set({ name: "Mary Poppins", age: -1 },{validate:true});     //将触发alert        
var person = new Person;    
person.set({ name: "Dr Manhatten", age: -1 },{validate:true});    // 不会触发




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值