什么是模型
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}); // 不会触发